小ネタ。OCamlの複雑な機能の中にファンクタというものがあります。 これをどういうふうにコンパイルしているのか見てみましょう。 結論からいうと、 OCamlのモジュールというのはただのレコードである。 ファンクタはレコードを受け取ってレコードを返すまさに関数である です。 コード例 実際のファンクタを使ったコードを見て、これがどういうふうに中間コードで表現されるのか見てみましょう。 module type S = sig type t val f : t -> t end module Make (M: S) = struct let h1 = (M.f, M.f) let h2 = (M.f, M.f) end module M1 = struct type t = int let f x = x end module M2 = Make(M1) このコードは、ファンクタMakeをつく