小编kin*_*ini的帖子

为什么使用多个生成器的Haskell列表推导将最右边的生成器视为最紧密的循环?

我正在阅读Gentle Introduction,我想知道为什么在使用两个生成器的列表理解中,最右边的生成器是"最快的"迭代(即编译到最里面的循环,我猜).观察以下GHCi输出:

*Main> concat [[(x,y) | x <- [0..2]] | y <- [0..2]]
[(0,0),(1,0),(2,0),(0,1),(1,1),(2,1),(0,2),(1,2),(2,2)]
*Main> [(x,y) | x <- [0..2], y <- [0..2]]
[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
Run Code Online (Sandbox Code Playgroud)

如果最左边的生成器迭代最快,上面两个表达式将具有相同的值,我认为这使得选择此约定更加自然.

那么有谁知道为什么选择相反的惯例?我注意到Python与Haskell具有相同的约定(甚至可能从Haskell借用它?),而在Python世界中,这个词似乎是选择了"因为这是你编写for循环的顺序",但是我认为,就for循环来说,思考并不是大多数Haskell程序员所做的......

思考?


从我对Louis Wasserman的回答如下:

我猜这里对应于理解的命令式解释的顺序被认为比嵌套列表更自然.所以在本质上,Haskell对此的解释与我在问题中链接的Python解释相同,毕竟,似乎.

haskell conventions

15
推荐指数
2
解决办法
6220
查看次数

在 Cabal 测试套件中查找我的可执行文件

我正在尝试为构建可执行文件的 cabal 项目编写测试套件。我希望套件中的测试运行该特定的可执行文件,但我不知道在哪里可以找到它(因为我的测试可能是从某个未知位置的沙箱中运行的)。

Cabal 在调用我的测试套件时应该知道我的项目的可执行文件在哪里。我的测试模块/程序有什么方法可以从 Cabal 收集这些信息和其他类似信息,也许是使用新的detailed-1.0测试框架?

testing haskell cabal

5
推荐指数
1
解决办法
312
查看次数

nix 构建守护进程是否保留构建日志?

有时在运行时nix-buildnixos-rebuild我发现了一些易于修复的问题(例如已弃用的警告或多余的导入),我想“很有趣,我可以在空闲时间修复它”。

我知道我可以将构建日志重定向到一个文件,但我一直忘记这样做,直到我再次看到警告。

问题:nix 构建守护进程是否将构建日志保存在某处?

nixos nix

3
推荐指数
1
解决办法
709
查看次数

标签 统计

haskell ×2

cabal ×1

conventions ×1

nix ×1

nixos ×1

testing ×1