ocaml
プロジェクトで作業中に私が実際に理解していないものが見つかりました。ocamlのモジュラプログラミング
OCaml標準ライブラリのモジュールとList
モジュールの両方を使用しているとします。どちらも関数length
を実装していますが、タイプは異なります。 List
モジュールで 、これはそのタイプです:
length: a' list -> int
そしてArray
モジュールでは、それはタイプがあります。
length: a' array -> int
をしかし、私はあなたが私がした同じモジュールで両方のモジュールを使用したかったですopen
キーワードを経て、実装:
open List
open Array
私は上のlength
機能を使用しようとしたときリストでは、コンパイル時にタイプエラーが発生しました。
OCamlは強力な静的型言語なので、私は両方を使用していると宣言して以来、コンパイラがリストモジュールの長さ関数を望んでいないのをなぜ知りませんでした。
"コンパイラがリストモジュールの長さ関数を望んでいない理由は分かっています。なぜなら、私は「はい」を使用していたと宣言していたからですが、' fun s - > length s'この文脈は? –
jrouquieの答えに基づいて、 'a 'array - > int' –
正確には推測しようとした仮想OCamlコンパイラの場合、OCaml型システムには最も一般的な型は1つしかありません関数のために。あなたは、この厄介なことに対するHaskellの解答に興味があるかもしれません。クラスをタイプしてください:http://www.haskell.org/tutorial/classes.html –