История изменений
Исправление 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!» вообще не вывелось, а чо от них же ничего не зависит..