Я болтал с Садек Дроби в твиттере, когда мне сообщили, что F # не поддерживает бесконечные типы. Оказывается, в C # вы можете сделать что-то вроде этого:
delegate RecDelegate<T> RecDelegate<T>(T x);
Однако после некоторых экспериментов с обеими нашими частями мы определили, что то же самое в F # кажется невозможным как в явном, так и в явном виде.
Явное:
type 'a specialF = 'a->specialF<'a>
ошибка FS0191: определение этого типа
включает в себя немедленную циклическую ссылку
через аббревиатуру, поле структуры
или наследственное отношение.
Неявные:
let rec specialF (x: 'a) = specialF
Несоответствие типов. Ожидая 'б, но
учитывая "а ->" б. Полученный тип
будет бесконечным при объединении "б"
и '' a -> 'b'.
Конечно, это намеренно простые образцы.
Мне было интересно, ошибаюсь ли я. Возможно, я пропустил какой-то тип необходимой аннотации?