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

时间:2016-09-07 01:24:14

标签: haskell ghci

对于( - >)我们有:

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

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

如何( - >)一般说出或发音?

1 个答案:

答案 0 :(得分:12)

C是函数类型,人们通常将其发音为" to" (即(->)将被发音" a到b")。

a -> 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的{​​{1}}一样。

如果您想使用中缀语法,可以定义一个启用了Void扩展名的类型运算符,其含义与Data.Void相同:

TypeOperators

Foo

例如,如果我们要模拟OCaml并将对类型写为data a +~ b 而不是data (+~) a b ,那么这可能很有用:

a * b