let多相を持った言語を実装したよ

これは何?

Types and Programming Languages (The MIT Press)プログラミング言語の基礎理論 (情報数学講座)を読んだけど、let多相がよく分からない。
ならば、let多相を持った簡単なプログラム言語を作ってみよう。
名前は「Scala + let多相」なんでscalet。別にScalaの拡張というわけではない。

どんな機能があるの?

定数は、intとbool。

scalet> 42
- : int = 42
scalet> true
- : bool = true

構文はletとif、あと関数を作るfn。

scalet> if true then 42 else 0
- : int = 42
scalet> let x = 42 in x
- : int = 42
scalet> fn x -> x
- : (a0 -> a0) = -

あと適当に型推論もしてくれる。

scalet> fn x -> x 42
- : ((int -> a5) -> a5) = -
scalet> let id = fn x -> x in (id id) 42
- : int = 42

ダウンロード/インストール

http://bitbucket.org/mzp/scalet/のDownloadからダウンロードできます。

ビルドはMaven2をインストールしたあと

$ mvn package

で完了します。

実行方法

$ scala -cp target/scalet-0.1.jar org.howdyworld.scalet.App
scalet>

できないこと

  • let x = 42のような変数宣言
  • intはあるけど、算術演算関数はない
  • boolはあるけど、論理演算関数はない