Syntax OCaml显式类型签名
在Haskell中,显式声明函数的类型签名被认为是一种良好的做法,即使它(通常)是可以推断的。这在OCaml中似乎是不可能的,例如Syntax OCaml显式类型签名,syntax,types,ocaml,type-inference,Syntax,Types,Ocaml,Type Inference,在Haskell中,显式声明函数的类型签名被认为是一种良好的做法,即使它(通常)是可以推断的。这在OCaml中似乎是不可能的,例如 val add : int -> int -> int ;; 给我一个错误。(尽管我可以制作只提供签名的类型模块。) 这在OCaml中是不可能的,我说的对吗 若然,原因为何?OCaml的类型系统似乎与Haskell没有太大的不同 OCaml有两种指定类型的方法,它们可以内联完成: let intEq (x : int) (y : int) : bool
val add : int -> int -> int ;;
给我一个错误。(尽管我可以制作只提供签名的类型
模块。)
OCaml有两种指定类型的方法,它们可以内联完成:
let intEq (x : int) (y : int) : bool = ...
也可以将它们放置在接口文件中,如您所做:
val intEq : int -> int -> bool
我认为后者是首选,因为它更清晰地将规范(类型)与实现(代码)分开
参考资料:Im常规,让-用约束类型绑定值的语法为:
let val : constraint = e ...
应用于函数时,可以按如下方式指定签名:
let add : int -> int -> int = fun x y -> ...
这类似于将模块约束到签名所需的语法:
module Mod
: sig ... end
= struct ... end
后一个选项不再是有效选项。至少OCAML4.04.0不支持它。每个人都应该使用第一个选项,这根本不正确。OCaml 4.04.0及以上版本支持接口文件
.mli
文件是向模块声明接口的首选方式。