型推論で悩む

型推論アルゴリズムで非常に悩んでいる。

今のところの案を整理しながら書いてみると…


次のようなプログラムをパースすることを考える:

class List
{
  export method <Int> count ();
}

class Integer
{
  export method <> print ();
  export method <Integer> op_add (<Integer> lhs, <Integer> rhs);
  export method <Integer> op_sub (<Integer> lhs, <Integer> rhs);
  export method <Integer> op_mul (<Integer> lhs, <Integer> rhs);
  export method <Integer> op_div (<Integer> lhs, <Integer> rhs);  
}

class TestApp
{

method wrap (a)
{
  a
}

method add (x, y)
{
  x + y
}

export method <Integer> main (<List> argv)
{
  List count print

  wrap((x + y) print)
  0
}

}