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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage