Czy typy nieskończone (aka typy rekurencyjne) nie są możliwe w F #?

Rozmawiałem zSadek Drobi na twitterze, gdy pojawi się informacja, że ​​F # nie obsługuje typów nieskończonych. Okazuje się, że w języku C # możesz zrobić coś w ten sposób:

delegate RecDelegate<T> RecDelegate<T>(T x);

Jednak po kilku eksperymentach na obu naszych częściach ustaliliśmy, że to samo w F # wydaje się niemożliwe zarówno w sposób ukryty, jak i jawny.

Wyraźny:

type 'a specialF = 'a->specialF<'a>

błąd FS0191: Ta definicja typu obejmuje natychmiastowe cykliczne odniesienie poprzez skrót, pole struktury lub relację dziedziczenia.

Domniemany:

let rec specialF (x: 'a) = specialF

Niezgodność typu. Oczekiwano a 'b, ale podano „a ->” b. Wynikowy typ byłby nieskończony przy jednoczeniu '' b 'i' 'a ->' b '.

Oczywiście są to celowo proste próbki.

Zastanawiałem się, czy w jakiś sposób się mylę. Może brakowało mi jakiegoś rodzaju adnotacji?

questionAnswers(3)

yourAnswerToTheQuestion