LINUX.ORG.RU

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

Исправление qnikst, (текущая версия) :

у меня не получилось...

instance Monad L where
   return = pure
   m >>= g = L $ do m' <- unsafeInterleaveIO $ unL m
                    unL $ g m'

lputStrLn  :: String -> L ()
lputStrLn = L . putStrLn

lprint :: Show a => a -> L ()
lprint = L . print

lreadLnInt :: L Int
lreadLnInt = L readLn


test1 :: L Int
test1 = lputStrLn "hi" >> lreadLnInt

test2 :: Int -> L ()
test2 x = lputStrLn "yo!" >> lprint x

в итоге «hi» и «yo!» вообще не вывелось, а чо от них же ничего не зависит..

Исходная версия qnikst, :

у меня не получилось...

instance Monad L where
   return = pure
   m >>= g = L $ do m' <- unsafeInterleaveIO $ unL m
                    unL $ g m'

lputStrLn  :: String -> L ()
lputStrLn = L . putStrLn

lprint :: Show a => a -> L ()
lprint = L . print

lreadLnInt :: L Int
lreadLnInt = L readLn


test1 :: L Int
test1 = lputStrLn "hi" >> lreadLnInt

test2 :: Int -> L ()
test2 x = lputStrLn "yo!" >> lprint x

в итоге «hi» и «yo!» вообще не вывелось, а чо от них же ничего не зависит..