gpt4 book ai didi

haskell - 为什么种类列表 * -> *?

转载 作者:行者123 更新时间:2023-12-03 23:20:24 25 4
gpt4 key购买 nike

在 GHCI 中,在列表 [] 上使用 :info 将显示它是同类 * -> *

Prelude> :i []
type [] :: * -> *

当我可以构造一个包含多个元素的列表时,我该如何推理呢? [1, 2, 3]

最佳答案

列表在 Haskell 中有特殊的语法。

你可以自己定义一个数据类型,比如列表,使用正常的语法,如

data List a = Nil | Cons a (List a)

现在要特别注意,对于这个定义,空列表被写成 Nil 而不是 [],并且整数列表的类型被写成 列出 Int 而不是 [Int]

如果我们看一下整数列表的类型,它由两个部分组成,ListInt。孤立地看 List,它是一个“类型构造函数”,一个类型级别的函数,它接受一个参数,该参数本身就是一个类型(例如 Int),并且形成一个新类型 List Int。在某些情况下能够不带参数地谈论 List 是很有用的,例如作为其他类型构造函数的参数,或者作为类型类的参数,例如 FunctorApplicative。因此,List 具有类型 * -> *,因为它需要一个参数。

对于 Haskell 的内置列表类型,如上所述,List Int 通常写为 [Int],但也可以写成[] Int,实际上[]对应于孤立的List,指的是没有应用到它的参数而写的列表类型构造函数, 因此它也有种类 * -> *.

元组类型构造函数在 Haskell 中也有特殊的语法。例如,一对整数和一个 bool 值通常写为 (Int, Bool),但也可以写为 (,) Int Bool ,其中 (,) 是未应用的对类型构造函数,并且具有类型 * -> * -> *,因为它需要两个参数。

关于haskell - 为什么种类列表 * -> *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63312344/

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