Sind unendliche Typen (auch rekursive Typen genannt) in F # nicht möglich?
Ich unterhielt mich mitSadek Drobi auf Twitter, wenn darauf hingewiesen wird, dass F # Infinite Types nicht zu unterstützen scheint. Es stellt sich heraus, dass Sie in C # Folgendes tun können:
delegate RecDelegate<T> RecDelegate<T>(T x);
Nach einigen Experimenten an beiden Stellen stellten wir jedoch fest, dass das Gleiche in F # sowohl implizit als auch explizit unmöglich zu sein scheint.
Ausdrücklich:
type 'a specialF = 'a->specialF<'a>
Fehler FS0191: Diese Typdefinition beinhaltet eine sofortige zyklische Referenz über eine Abkürzung, ein Strukturfeld oder eine Vererbungsbeziehung.
Implizit:
let rec specialF (x: 'a) = specialF
Typenkonflikt. A 'b erwarten, aber ein' a -> 'b gegeben. Der resultierende Typ wäre unendlich, wenn '' b '' und '' a -> 'b' 'vereinigt würden.
Dies sind natürlich absichtlich einfache Beispiele.
Ich habe mich gefragt, ob ich mich irre. Vielleicht habe ich irgendeine notwendige Anmerkung verpasst?