Стандарт ML не имеет полиморфной рекурсии. Добавление рекурсии к языку модуля позволяет нам восстанавливать полиморфную рекурсию как особый случай, используя фиксированные точки endofunctors. Например:Вывод типа для полиморфной рекурсии, закодированной как рекурсия модуля
signature SEQ =
sig
type 'a seq
(* operations on sequences *)
end
functor BootstrapSeq (S : SEQ) =
struct
datatype 'a seq
= Nil
| Zero of ('a * 'a) S.seq
| One of 'a * ('a * 'a) S.seq
(* operations on sequences *)
end
structure rec Seq = BootstrapSeq (Seq)
Известно, что полиморфная рекурсия делает вывод типа неразрешимым. Однако определение функтора уже содержит информацию о частичном типе, а именно, подпись его аргумента. Является ли эта информация достаточной для повторения типового вывода?
Какая реализация поддерживает 'structure rec'? –
@ IonuţG.Stan: AFAICT, нет, хотя я не пробовал SML/NJ. – pyon
А, это скорее теоретический вопрос. SML/NJ не поддерживает его. –