3
对于( - >),我们有:数据( - >)a b是什么意思?
Prelude> :i (->)
data (->) t1 t2 -- Defined in ‘GHC.Prim’
是什么语法是什么意思?我认为数据声明关键字需要LHS上的类型构造函数和RHS上的一个或多个值构造函数?
(( - >)通常如何说出或发音?
对于( - >),我们有:数据( - >)a b是什么意思?
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)
'(+)a b'等价于表达式层面的'a + b'。 '( - >)a b'等同于类型级别的'a - > b''。用括号括起中缀表达式就是你如何在前缀中编写它。 –