上の質問をした経緯です 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい しかし、F#では、次のような呼び出しは型情報が∞ループして決定できない let fact self n = if n=1 then 1 else n * ((self self) (n-1)) in fact fact 10;; そこで、まずは、再帰的なデータ型を定義して用い、上記のような呼び出しを通るようにしたい (再帰的に'aを'a->'bに置き換えるような型)
上のプログラムですが、次のようにするとコンパイルは通ります。 let apply1 f:FUNC<int,int> = f 1;; val apply1 : (int -> FUNC<int,int>) -> FUNC<int,int> しかし、自分が求めた型は val apply1 : FUNC<int,int> -> int なのですが、なぜこうなるのかはさっぱりわかってません