对于( - >)我们有:
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)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |