История изменений
Исправление qnikst, (текущая версия) :
Ну я рассматривал такой вариант как часть того, что ты описал в стартовом посте. В общем-то так оно выглядит более адекватно, но суть остается такая же. Я правильно понял, что ты хочешь сделать, что-то вроде?
data CFix a b = CFix {- state -} a {- continuation -} !(CFix b)
| Result b
computation :: ... -> CFix a b
runner :: Show a => CFix a b -> IO b
runner = loop
where
loop (Result x) = return x
loop (CFix s f') = do
ifSomeStuffHappens (print s)
loop $! f'
(интересно сколько я раз тут налажал)
Исходная версия qnikst, :
Ну я рассматривал такой вариант как часть того, что ты описал в стартовом посте. В общем-то так оно выглядит более адекватно, но суть остается такая же. Я правильно понял, что ты хочешь сделать, что-то вроде?
data CFix a b = CFix {- state -} a {- continuation -} !(CFix b)
| Result b
computation :: ... -> CFix a
runner :: Show a => CFix a b -> IO b
runner = loop
where
loop (Result x) = return x
loop (CFix s f') = do
ifSomeStuffHappens (print s)
loop $! f'
(интересно сколько я раз тут налажал)