erg/doc/JA/compiler/unification.md
Shunsuke Shibayama 96132b20f6 initial commit
2022-08-10 23:02:27 +09:00

1 KiB

単一化(Unification)

出現検査(Occur Check)

Ergは再帰型を許可するが、意味の無い、ナンセンスな再帰型はエラーとする。ナンセンスな型とは、具体的な型を挙げることができない型である。そのチェックするのが出現検査である。 下の例は、意味のある型である。

T = Int
T = Int or Option T # Int or Option Int or Option Option Int or ...
Maybe T = Option T
T = Int or T # will be warned (should just be `Int`)

対して以下は、意味をなさない型である。

T = T
T = Option T
T = T or T

T = U
U = T

T X = T X
U T = T U

判定のアルゴリズムは、大まかにはこうである。

  • ある未判定の型Tを判定する時、それが「定義済みの型を含むor型」でなく、Tを含む場合はエラーとなる。
  • 多項カインドが単純型として扱われた場合はエラーとなる。

注意として、ErgはF = F -> T(Tは任意の型)型の存在を許す。