単純な型システムの導入
0918nobita opened this issue · comments
概要
- すべての項が静的に型付けされた状態を表現する中間言語を追加する
- ラムダ抽象では明示的に引数の型が指定されていなければならない
(λ (: x [type]) [expr])
型シグネチャを記述するためのアトム・特殊形式
- unit 型
Unit
- 整数型
Int
- 真偽型
Bool
- 参照型
(Ref [type])
- 関数型
(-> [type] [type])
推論規則
- unit 型リテラル
#unit
→Unit
- 整数リテラル →
Int
- 真偽値リテラル →
Bool
- 関数呼び出し
([func: (-> 'a 'b)] [arg: 'a])
→'b
- カリー化されていない組み込み関数
(+ [lhs: Int] [rhs: Int])
→Int
(- [lhs: Int] [rhs: Int])
→Int
(* [lhs: Int] [rhs: Int])
→Int
(= [lhs: Int] [rhs: Int])
→Bool
(< [lhs: Int] [rhs: Int])
→Bool
(<= [lhs: Int] [rhs: Int])
→Bool
(ref [init: 'a])
→(Ref 'a)
(deref [ref: (Ref 'a)])
→'a
(mut [ref: (Ref 'a)] [new_value: 'a])
→'a