我注意到,在Haskell文档的最官方资源中找不到这两个定义:
(:) :: a -> [a] -> [a]
data [] a = [] | a : []
我检查了Hoogle,没有
data []
或(:)
的条目。难道这两个不应该是“正常”功能和数据类型吗?编辑:在Haskell 2010 Language Report中,他们说
-- The (:) operator is built-in syntax, and cannot legally be given
-- a fixity declaration; but its fixity is given by:
-- infixr 5 :
但为什么?是否有特定原因可以单独选择此功能?
最佳答案
它是内置语法,不是真正的内置函数。函数(:)
只是内置类型[]
的两个构造函数之一。然而:
[]
对于类型名称而言不是有效的Haskell语法。因此它必须是内置语法。 [a]
实例化的类型语法[]
是内置语法。 []
对于构造函数名称而言无效的Haskell语法。因此它必须是内置语法。 [ x, y, z ]
是内置语法(显然)。 由于有关
[]
类型的所有其他事情基本上都是内置语法,因此决定也要使:
内置语法,而不是让它成为实际上是该语言中有效名称的一个例外。关于haskell - 为什么内置(())?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32362973/