我今天正在阅读 Jason Hickey 的在线书籍“Objective Caml 简介”,在关于 Functor 的章节(第 140 页)中,我在 Set functor 的定义中遇到了以下行:
let add = (::)
运行代码会导致一条不太明显的“语法错误”错误消息。在将行中的插件插入 ocaml 顶层之后,我发现这::
实际上不是运算符,而是类型构造函数。
但是,根据我对 Haskell 的了解,等效的:
构造函数也可以被视为运算符(函数)。
Prelude> :t (:)
(:) :: a -> [a] -> [a]
我的问题是:OCaml 构造函数从来都不是一流的值(暗示书中的代码从一开始就是错误的),为什么会这样?