据称列表被定义为:data List a = Null | Cons a (List a)
,
但众所周知,它有特殊的语法。我可以看到 :
只是 Cons
的别名类型构造函数,但是 1) 这种语法是如何/在哪里实现的,以及 2) 我可以为另一个数据类型定义我自己的特殊语法,比如 [whamlet|Hello World!|]
Yesod 使用的。
谢谢。
最佳答案
您可能正在寻找 OverLoadedlists ghc 扩展。这允许您使用列表语法 [1,2,3]
对向量、集合和其他结构进行初始化和模式匹配。链接提供了一些如何设置列表重载的示例。
[1, 2, 3, 4, 2] :: Set Int
[1, 2, 3, 4, 5] :: Vector Int
它目前不处理异构列表,也不会重载
:
。运算符(operator)。您可能想阅读 trac page on the extension .
如果您正在寻找通用的 cons 运算符,您应该查看
Control.Lens.Cons
中的模块lens包裹。特别是
<|
operator .从hackage文档复制:>>> a <| []
[a]
>>> a <| Seq.fromList []
fromList [a]
关于haskell - 您可以对自定义数据类型使用特殊语法,例如在列表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542813/