LINUX.ORG.RU

История изменений

Исправление 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'

(интересно сколько я раз тут налажал)