在Haskell中,明确声明函数的类型签名被认为是一种好习惯,即使它(通常)可以推断出来。似乎在OCaml中甚至不可能这样,例如
val add : int -> int -> int ;;
给了我一个错误。 (虽然我可以制作只提供签名的type
个模块。)
答案 0 :(得分:43)
OCaml有两种指定类型的方法,它们可以内联完成:
let intEq (x : int) (y : int) : bool = ...
或者它们可以放在接口文件中,如下所示:
val intEq : int -> int -> bool
我认为后者是首选,因为它更清晰地将规范(类型)与实现(代码)分开。
答案 1 :(得分:16)
我很通用,let
的语法 - 用约束类型绑定一个值是:
let val : constraint = e ...
应用于函数,您可以按如下方式指定签名:
let add : int -> int -> int = fun x y -> ...
这类似于将模块约束到签名所需的语法:
module Mod
: sig ... end
= struct ... end