JavaScript

JavaScriptによる型推論器の実装:バリアント型

前:let と let rec 目次 パターンマッチ対象の型推論 昨日挙げた以下のコードではバリアントを使用していますが、パターンマッチ対象である m の型はどこにも明示されていません。 let rec add = fun m -> fun n -> case m of Zero -> fun _ -> n | Succ ->…

JavaScriptによる型推論器の実装: let と let rec

前:多相型 目次 次:バリアント型 再帰関数の型推論 以下は、階乗を求める関数 fac の定義です。 let rec fac = fun n -> if n = 0 then 1 else n * fac (n - 1)このように、Ibis で再帰関数を定義する際は let ではなく let rec を使います。これは OCaml …

JavaScript による型推論器の実装:多相型

前:型変数と単一化 目次 次:let と let rec 中身のない型変数 前回の例では、すべての型変数(Var オブジェクト)に型が代入されました。しかし、以下の場合はどうでしょう。 fun x -> x関数の本体に手がかり(関数適用など)がありませんから、x の具体的…

JavaScript による型推論器の実装:型変数と単一化

目次 次:多相型 未知の型 型推論の肝は、未知の型の扱いです。 例えば、 fun x -> x * 2という式の型推論をする際、仮引数 x の型は指定されていませんから未知です。関数の本体を見て「x は * の左辺に現れる」という情報を見つけることで初めて x の型が …

JavaScript による型推論器の実装

型推論に興味はあるけど、抽象的な説明が多く難しそうだと思っている方々。基礎的なことを押さえておけば、型推論器は簡単に実装できます。 ここでは、私が JavaScript で書いた型推論器を例に、型推論の基本的なアルゴリズムの一例を具体的に説明していきま…

JavaScriptで型推論器を作りました

JavaScriptで型推論付き静的型付け言語のインタプリタを作成しました。これは、サイボウズ・ラボユースのメンバーとして開発をさせていただいたものです。ライセンスは MIT License です。Ibis Interpreter GitHub型推論の実装方法を解説するため、メジャー…