gpt4 book ai didi

haskell - 数据 (->) a b 是什么意思?

转载 作者:行者123 更新时间:2023-12-01 07:35:33 24 4
gpt4 key购买 nike

对于 (->) 我们有:

Prelude> :i (->)
data (->) t1 t2 -- Defined in ‘GHC.Prim’

这个语法是什么意思?我认为数据声明关键字需要 LHS 上的类型构造函数和 RHS 上的一个或多个值构造函数?

(->) 通常是如何发音或发音的?

最佳答案

(->)是函数类型,人们通常将其发音为“to”(即 a -> b 将发音为“a to b”)。
(->)是一个内置于 GHC 的原始结构:编译器专门处理它。但是,有些工具如 :i与正常类型一起工作的人看到 (->) 的假定义好像它是一个空数据类型:

data (->) a b

这允许 :i为您提供有关内置操作的信息,就好像它是一个普通定义一样。
(->) a b语法是中缀名称的前缀版本,就像您可以以前缀形式定义普通运算符一样:
a ~+ b = a * b + b

是相同的
(~+) a b = a * b + b

如果你真的尝试定义 (->)你自己这样做,你会得到一个错误:
<interactive>:20:1-13: error:
Illegal binding of built-in syntax: (->)

但是,如果给它们一个有效的名称,您可以自己定义这样的空数据类型:
data Foo a b

这使得 Foo具有两个(幻像)参数的类型,除了 ⊥ 之外没有其他值,就像 Void来自 Data.Void .

如果您想使用中缀语法,可以使用 TypeOperators 定义类型运算符。启用扩展,与 Foo含义相同:
data a +~ b

或者
data (+~) a b

例如,如果我们想模拟 OCaml 并将对类型写为 a * b,这可能很有用。而不是 (a, b) :
type a * b = (a, b)

关于haskell - 数据 (->) a b 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359969/

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