您可以在列表中使用特殊语法来自定义数据类型吗?

asg*_*451 3 haskell ghc

据称列表被定义为:data List a = Null | Cons a (List a),但它具有我们都知道的特殊语法.我可以看到如何:只是Cons类型构造函数的别名,但1)这个语法实现的方式/位置2)我可以为其他数据类型定义我自己的特殊语法,就像[whamlet|Hello World!|]Yesod使用的那样.

谢谢.

nom*_*men 5

列表语法在编译器的源代码中定义.

莎士比亚使用的语法称为"准指数"语法,它也是编译器中定义的特殊语法.你可以制作自己的准引号.


Dav*_*rak 5

您可能正在寻找OverLoadedlists ghc扩展.这允许您使用列表语法[1,2,3]来初始化和模式匹配向量,集和其他结构.链接提供了一些如何设置列表重载的示例.

[1, 2, 3, 4, 2] :: Set Int
[1, 2, 3, 4, 5] :: Vector Int
Run Code Online (Sandbox Code Playgroud)

它目前不处理异构列表,也不会过度加载:运算符.

您可能想要阅读扩展程序上的trac页面.

如果您正在寻找通用的cons运算符,您应该查看镜头包中的Control.Lens.Cons模块 .特别是运营商.从hackage文档复制:<|

>>> a <| []
[a]
>>> a <| Seq.fromList []
fromList [a]
Run Code Online (Sandbox Code Playgroud)