Разве бесконечные типы (или рекурсивные типы) невозможны в F #?
Я болтал сСадек Дроби в твиттере, когда вы узнаете, что F # не поддерживает бесконечные типы. Оказывается, в C # вы можете сделать что-то вроде этого:
delegate RecDelegate<T> RecDelegate<T>(T x);
Однако после некоторых экспериментов с обеими нашими частями мы определили, что то же самое в F # кажется невозможным как неявным, так и явным образом.
Explicit:
type 'a specialF = 'a->specialF<'a>
error FS0191: This type definition involves an immediate cyclic reference through an abbreviation, struct field or inheritance relation.
Implicit:
let rec specialF (x: 'a) = specialF
Type mismatch. Expecting a 'b but given a 'a -> 'b. The resulting type would be infinite when unifying ''b' and ''a -> 'b'.
Конечно, это намеренно простые образцы.
Мне было интересно, если я как-то ошибаюсь. Возможно, я пропустил какой-то тип необходимой аннотации?