gpt4 book ai didi

haskell - 为什么内置 `(:)`?

转载 作者:行者123 更新时间:2023-12-03 20:27:15 26 4
gpt4 key购买 nike

我注意到这两个定义在 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 ]是内置语法(显然)。

  • 因为基本上所有关于类型 []是内置语法,因此决定使用 :内置语法,而不是让它成为语言中实际上是有效名称的一个异常(exception)。

    关于haskell - 为什么内置 `(:)`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362973/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com