Pet*_*dic 9 constructor ocaml list
我今天正在阅读Jason Hickey的在线书籍"Objective of Caml",在Functors(第140页)一章中,我在Set functor的定义中遇到了以下几行:
let add = (::)
Run Code Online (Sandbox Code Playgroud)
运行代码导致一个不太明显的"语法错误"错误消息.在插入ocaml toplevel的行后,我发现::实际上它不是一个运算符,而是一个类型构造函数.
但是,从我对Haskell的了解很少,等效:构造函数也可以被视为运算符(函数).
Prelude> :t (:)
(:) :: a -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)
我的问题是:OCaml构造函数从来都不是第一类值(意味着本书中的代码从一开始就是错误的),为什么会出现这种情况?
gas*_*che 12
在OCaml的前身Caml Light中,曾经是构造函数在部分应用时被提升为函数的情况.我不太清楚为什么在移动到OCaml时移除了这个功能,我也感激不尽,但我听到的解释是"没人用过".所以List.map Some foo不再......
:: 作为代数数据类型构造函数有点特殊,因为它是唯一的中缀构造函数(在解析器中硬编码),但在其他方面的行为与任何其他数据类型构造函数一样.
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |