我注意到这两个定义无法在Haskell文档的最官方资源中找到:
(:) :: a -> [a] -> [a]
data [] a = [] | a : []
Run Code Online (Sandbox Code Playgroud)
我检查过Hoogle并且没有条目data []或(:).这两个不应该是"正常"功能和数据类型吗?
编辑:在Haskell 2010语言报告中,他们说
-- The (:) operator is built-in syntax, and cannot legally be given
-- a fixity declaration; but its fixity is given by:
-- infixr 5 :
Run Code Online (Sandbox Code Playgroud)
但为什么?是否有特殊原因可以挑出这个功能?
Jon*_*ast 16
它是内置语法,而不是内置函数.该函数(:)只是内置类型的两个构造函数之一[].然而:
[]不是有效的Haskell语法; 所以它必须是内置语法.[a]实例化的类型语法[]是内置语法.[]函数的名称对于构造函数名称不是有效的Haskell语法; 所以它必须是内置语法.[ x, y, z ]是内置语法(显然).由于关于该类型的其他所有内容基本上都是[]内置语法,因此决定制作:内置语法,而不是让它成为实际上是该语言中有效名称的一个例外.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |