Я просматривал некоторые заметки и понял, что что-то не так.
При эмуляции отложенных вычислений (без open Lazy;
) для потока из них можно сделать следующее.
datatype 'a susp = Susp of (unit -> 'a)
datatype 'a stream' = Cons of 'a * ('a stream') susp
type 'a stream = ('a stream') susp
fun delay (f ) = Susp(f);
fun force (Susp(f)) = f ();
val rec ones' = fn () => Cons(1, delay(ones'));
val ones = delay(ones')
fun ltail(Susp(s)) = ltail'(force s)
and ltail' (Cons(x,s)) = s
Но для получения подвесного хвоста типы не совпадают.
operator domain: 'Z susp
operand: unit -> 'Y
Что нужно будет поменять на подходящие типы для ltail?
Я знаю, что происходит с не подвешенным хвостом.
Я просто хочу выяснить, что говорят заметки для приостановленной версии.