小编Ana*_*Ana的帖子

Haskell和Vim:正确的缩进

在SO上搜索" vim haskell indent ".关于如何为Haskell缩进配置Vim有很多答案.他们都没有真正"工作".它们不提供Haskell缩进维基页面建议的代码.例如,do或let块中的语句对齐,数据类型=|数据类型等.

是否存在生成wiki等代码的Vim解决方案?

haskell indentation

19
推荐指数
1
解决办法
2730
查看次数

在什么情况下Haskell的`读取'返回多个列表项?

我可以做以下事情:

Prelude> reads "1 2 3" :: [(Int, String)]
[(1," 2 3")]
Prelude> reads "(1,2) (3,4)" :: [((Int, Int), String)]
[((1,2)," (3,4)")]
Prelude> reads "(1,2)(3,4)" :: [((Int, Int), String)]
[((1,2),"(3,4)")]
Prelude> reads "(1,2)\n(3,4)" :: [((Int, Int), String)]
[((1,2),"\n(3,4)")]
Prelude> reads "(1,2)    (3,4)" :: [((Int, Int), String)]
[((1,2),"    (3,4)")]
Run Code Online (Sandbox Code Playgroud)

我可以派生Read并阅读以阅读这些内容.但是我从来没有得到过读取来返回列表中的多个元组.为什么要reads返回一个清单?

haskell

19
推荐指数
1
解决办法
1509
查看次数

带有弱引用键的Swift字典?

假设我有一些表示网络连接的对象.断开这些连接后,关联的对象将消失.我不想挂在不再连接的连接对象上.

我还想使用字典将一些数据与这些连接相关联.所以我可能有代码:

class Connection { ... }
class Metadata { ... }

var metadata: [Connection: Metadata] = [:]
Run Code Online (Sandbox Code Playgroud)

但是上面的代码意味着字典将保留对Connection我不想要的对象的引用.当Connection对象消失时,我更愿意删除关联的条目,理想情况是自动删除.

所以我尝试过:

var metadata: [weak Connection: Metadata] = [:]
Run Code Online (Sandbox Code Playgroud)

但这不起作用.什么是一个很好的替代解决方案?

dictionary weak swift

16
推荐指数
1
解决办法
5570
查看次数

获取Haskell记录的字段名称作为字符串列表?

说我有以下内容:

data Rec = Rec {
    alpha :: Int,
    beta  :: Double,
    phi   :: Float 
} 

sample = Rec 1 2.3 4.5
Run Code Online (Sandbox Code Playgroud)

我理解模板Haskell和reify函数可以得到记录的字段名称.那是:

print $(f sample) --> ["alpha", "beta", "phi"]
Run Code Online (Sandbox Code Playgroud)

还有一种说法是,这可以在没有Template Haskell的情况下完成.有人可以为此提供一个示例实现吗?

haskell reify template-haskell

15
推荐指数
1
解决办法
1818
查看次数

为什么:k [False]导致GHCI出错?

我对下面会话结束时收到的错误感到困惑:

$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Ok, modules loaded: Main.
*Main> :set -XDataKinds

*Main> :t [False, True]
[False, True] :: [Bool]

*Main> :t [False]
[False] :: [Bool]

*Main> :k [False, True]
[False, True] :: [Bool]

*Main> :k [False]

<interactive>:1:2:
    Expected kind ‘*’, but ‘False’ has kind ‘Bool’
    In a type in a GHCi command: [False]
Run Code Online (Sandbox Code Playgroud)

为什么错误?


未来的实验揭示:

*Main> :k [Int]
[Int] :: *

*Main> :k [Int, Int]
[Int, Int] :: [*]
Run Code Online (Sandbox Code Playgroud)

[Int]可以有人居住的价值,所以它是善良的*,但它也是有意义的[*] …

haskell data-kinds

12
推荐指数
1
解决办法
128
查看次数

如何在Swift中初始化对象期间将self传递给初始化程序?

我有以下代码:

import CoreBluetooth

class BrowserSample: NSObject, CBCentralManagerDelegate {
    let central : CBCentralManager

    init() {
        central = CBCentralManager(delegate: self, queue: nil, options: nil)
        super.init()
    }

    func centralManagerDidUpdateState(central: CBCentralManager!)  { }
}
Run Code Online (Sandbox Code Playgroud)

如果我central =之前把线放super.init(),那我得到错误:

self used before super.init() call
Run Code Online (Sandbox Code Playgroud)

如果我把它放在后面,我得到错误:

Property self.central not initialized at super.init call
Run Code Online (Sandbox Code Playgroud)

所以,我很困惑.我该怎么做呢?

ios core-bluetooth swift

11
推荐指数
1
解决办法
5229
查看次数

11
推荐指数
1
解决办法
342
查看次数

是否有一个简单的lisp相当于Python的生成器?

在Python中你可以这样写:

def firstn(n):
     num = 0
     while num < n:
         yield num
         num += 1
Run Code Online (Sandbox Code Playgroud)

什么是lisp相当于此?

lisp generator common-lisp

11
推荐指数
1
解决办法
1212
查看次数

优化Haskell内循环

仍在Haskell中处理我的SHA1实现.我现在有一个工作实现,这是内循环:

iterateBlock' :: Int -> [Word32] -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> [Word32]
iterateBlock' 80 ws a b c d e    = [a, b, c, d, e]
iterateBlock' t (w:ws) a b c d e = iterateBlock' (t+1) ws a' b' c' d' e'
    where
    a' = rotate a 5 + f t b c d + e + w + k t
    b' = a
    c' = rotate b 30
    d' = c
    e' …
Run Code Online (Sandbox Code Playgroud)

optimization haskell

10
推荐指数
1
解决办法
375
查看次数

Haskell根据字段名字符串动态设置记录字段?

说我有以下记录:

data Rec = Rec {
   field1 :: Int,
   field2 :: Int
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写这个函数:

changeField :: Rec -> String -> Int -> Rec
changeField rec fieldName value 
Run Code Online (Sandbox Code Playgroud)

这样我可以将字符串"field1"或"field2"传入fieldName参数并让它更新相关字段?我理解Data.Data并且Data.Typeable在这里使用的是什么,但我无法想出这两个包.


我见过的库的一个例子就是cmdArgs.以下是关于如何使用此库的博客文章的摘录:

{-# LANGUAGE DeriveDataTypeable #-}
import System.Console.CmdArgs

data Guess = Guess {min :: Int, max :: Int, limit :: Maybe Int} deriving (Data,Typeable,Show)

main = do
    x <- cmdArgs $ Guess 1 100 Nothing
    print x
Run Code Online (Sandbox Code Playgroud)

现在我们有一个简单的命令行解析器.一些示例交互是:

$ guess --min=10
NumberGuess {min = 10, …
Run Code Online (Sandbox Code Playgroud)

haskell record

10
推荐指数
2
解决办法
1837
查看次数