我曾经写过
data A = A {
a :: Double
}
deriving(Eq, Show)
Run Code Online (Sandbox Code Playgroud)
但现在我更喜欢
data A = A {
a :: Double
} deriving(Eq, Show)
Run Code Online (Sandbox Code Playgroud)
我认为答案是否定的,但无论如何我都会问:Haskell是否有代码格式化程序?
假设你有两个模块,比如
module Foo.A where
foo = 42
Run Code Online (Sandbox Code Playgroud)
和
module Foo.B where
foo = 12
Run Code Online (Sandbox Code Playgroud)
你想写一个超级模块
module Foo (
module Foo.A
, module Foo.B
) where
import Foo.A
import Foo.B
Run Code Online (Sandbox Code Playgroud)
重新导出这些模块,你会得到一个名字冲突.
这有解决方案吗?
当我谷歌如何将单元测试与cabal文件集成时,我发现
如何使用cabal运行所有单元测试(例如,每次我进行"cabal build")?
是否有标准高阶函数的直接组合来计算列表中的唯一元素?
例如,结果为
[1, 1, 4, 0, 4, 4]
Run Code Online (Sandbox Code Playgroud)
会是这样的
[(1,2), (4,3), (0,1)]
Run Code Online (Sandbox Code Playgroud) 我有一个长度为1的水平/垂直段的无序列表,它构建一个或多个多边形.我现在需要找到每个多边形中所有连接角的列表.
例:
[Horizontal (0,0), Vertical (2,0), Horizontal (1,0), Horizontal (2,2), Vertical (2,1)]
Run Code Online (Sandbox Code Playgroud)
代表这样的一条线
2 X--X
|
1 X
|
0 X--X--X
0 1 2
Run Code Online (Sandbox Code Playgroud)
我会寻找角落[(2,0),(2,2)].
在命令式语言中,我可能会使用(双重)链接数据结构并遍历这些结构.我无法在Haskell中找到一个优雅的代表.你会怎么做?
想象一下,你有一个评级
Rating = OneStar | TwoStars | ThreeStars | FourStars | FiveStars
Run Code Online (Sandbox Code Playgroud)
在Haskell中为这样的代数数据类型实例化/实现"Ord"的最佳方法是什么?
对于像append
列表(不是字符串)这样的廉价操作,我会使用Data.DList.让我筋疲力尽的是Hackage上的软件包标记为"实验性",最后一次更新是在2009年.
在Haskell中DList仍然是可行的吗?
以下场景的最佳数据结构是什么?
比如,你有一个URL列表
linkHaskell = Url "http://www.haskell.org"
linkReddit = Url "http://www.reddit.com"
...
Run Code Online (Sandbox Code Playgroud)
并且你单独使用它们,但是你也希望对它们进行操作,例如链接检查,你可以把它们放在一个列表中
allLinks = [
linkHaskell
, linkReddit
...
]
Run Code Online (Sandbox Code Playgroud)
但这很容易出错,因为您可能忘记添加新链接.
您可以选择将这些URL存储在Map中,但是如果您在键中存在拼写错误,则会为运行时错误交换编译时错误.
在Haskell你会做什么?
在Haskell中确定本地换行符(例如'\n'或'\ r \n')的最佳方法是什么?
我看到GHC.IO:Handle中有一个"nativeNewline"函数,但是假设它既是私有API又是大多数非标准Haskell.
有时我发现自己编程模式"如果Bool不是假的"或"如果列表不是空的则使用它,否则使用别的东西".
我正在寻找Bool和List的函数,这些函数对于Maybe来说是"可能"的功能.有吗?
更新:我的意思是使用Bool案例作为List-case的一般化.例如,当使用Data.Text作为T时:
if T.null x then x else foo x
Run Code Online (Sandbox Code Playgroud)
我希望减少这种锅炉板代码.
你能用Atom在Haskell中编写C语言吗?这是可能的,那会有意义吗?
我的问题出在最后一行:
module A where
data A = A { f :: Int }
defaultA = A { f = 0 }
Run Code Online (Sandbox Code Playgroud)
和
module B where
import A as A
data B = B { f :: Int }
bToA :: B -> A
bToA x = defaultA { A.f = f x }
Run Code Online (Sandbox Code Playgroud)
给
B.hs:8:26:
Ambiguous occurrence `f'
It could refer to either `B.f', defined at B.hs:5:13
or `A.f', imported from A at B.hs
Run Code Online (Sandbox Code Playgroud)
由于我不能在其自身中包含B限定,有什么替代方法可以解决命名空间冲突?我宁愿不重命名冲突函数.
编辑:更新了这些示例.