haskell - 您可以对自定义数据类型使用特殊语法,例如在列表中吗?

标签 haskell ghc

据称列表被定义为: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/

相关文章:

haskell - 无法将预期类型 `()' 与实际类型 `Int' 匹配

list - Haskell:如何 append 到元组列表列表?

haskell - 如何设置 IntelliJ 以使用 Stack 构建 Haskell 项目?

haskell - let 如何与 Haskell 中更高级别的类型交互?

haskell - 在haskell中解析html

postgresql - haskell postgresql-简单不兼容类型_int8和Int64(和整数)

haskell - 新类型比枚举更快吗?

haskell - Haskell 中非常大的字符串 trie

haskell - 无法编译haskell项目: linking step fails

haskell - 哪个 Haskell 包包含与 MATLAB 的 "fsolve"最相似的函数?