【发布时间】:2014-05-24 02:31:50
【问题描述】:
我基于它遵循类型和monad:
data Err a = Ok a | Bad String
deriving (Read, Show, Eq, Ord)
instance Monad Err where
return = Ok
fail = Bad
Ok a >>= f = f a
Bad s >>= f = Bad s
instance Functor Err where
fmap = liftM
我还有一个功能,它不能在屏幕上打印“asdf”并以错误结束(这是调试的临时解决方案):
runStatments :: [Stm] -> State -> Err State
runStatments [] state = Ok state
runStatments (s:_) state = case s of
PrintStmt exp -> do {
e <- evalExpression exp state;
k <- Ok $putStrLn "asfd";
Bad "damn!"
}
...
问题是代码不会在屏幕上打印“asdf”...
这种问题的温和解决方案是什么?我试过liftIO等等,但我不会写可编译的程序......
【问题讨论】: