Haskellでは、(通常は)推測できる場合でも、関数の型シグネチャを明示的に宣言することをお勧めします。これはOCamlでは不可能だと思われます。
val add : int -> int -> int ;;
エラーが出ます。 (ただし、署名のみを提供するtype
モジュールを作成できます。)
OCamlにはタイプを指定する2つの方法があり、インラインで実行できます。
let intEq (x : int) (y : int) : bool = ...
または、あなたがしたように、それらはインターフェースファイルに置くことができます:
val intEq : int -> int -> bool
仕様(タイプ)を実装(コード)からより明確に分離するため、後者の方が好ましいと思います。
参照: HaskellersのOCaml
一般的に、制約された型の値をlet
- bindする構文は次のとおりです。
let val : constraint = e ...
関数に適用すると、次のように署名を指定できます。
let add : int -> int -> int = fun x y -> ...
これは、モジュールを署名に制約するために必要な構文に似ています。
module Mod
: sig ... end
= struct ... end