ブックマーク / no-maddojp.hatenablog.com (1)

  • OCaml: どうやってファンクタをコンパイルしているのか - type t (* void *)

    小ネタ。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をつく

    OCaml: どうやってファンクタをコンパイルしているのか - type t (* void *)
    masquerade0324
    masquerade0324 2015/06/07
    型付けによる区別か。
  • 1