我注意到,在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/

    10-13 06:04