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

and*_*dro 3 haskell ghci

对于( - >)我们有:

Prelude> :i (->)
data (->) t1 t2         -- Defined in ‘GHC.Prim’
Run Code Online (Sandbox Code Playgroud)

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

通常如何( - >)说出或发音?

Tik*_*vis 12

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

(->)是GHC中内置的原始构造:编译器专门处理它.但是,像:i普通类型这样的工具会看到一个虚假的定义,(->)好像它是一个空数据类型:

data (->) a b
Run Code Online (Sandbox Code Playgroud)

这样可以:i为您提供有关内置操作的信息,就像它是正常的定义一样.

(->) a b语法是缀名的前缀版本,就像你可以定义前缀形式的正常运营:

a ~+ b = a * b + b
Run Code Online (Sandbox Code Playgroud)

是相同的

(~+) a b = a * b + b
Run Code Online (Sandbox Code Playgroud)

如果你真的尝试过(->)自己定义这种方式,你会收到一个错误:

<interactive>:20:1-13: error:
    Illegal binding of built-in syntax: (->)
Run Code Online (Sandbox Code Playgroud)

但是,你可以,如果你给他们一个有效的名称自己定义这样的空数据类型:

data Foo a b
Run Code Online (Sandbox Code Playgroud)

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

如果要使用中缀语法,可以定义TypeOperators启用了扩展名的类型运算符,其含义与Foo:

data a +~ b
Run Code Online (Sandbox Code Playgroud)

要么

data (+~) a b
Run Code Online (Sandbox Code Playgroud)

例如,如果我们想要模拟OCaml和写入对类型a * b而不是(a, b):

type a * b = (a, b)
Run Code Online (Sandbox Code Playgroud)