data CError = EA Int | EB String
deriving (Eq, Show)
type Env = [(VName, Value)]
newtype Test a = Test {runTest :: Env -> (Either CError a, [String]) }
我正在学习haskell,现在试图定义一个单子,但遇到这个错误,找不到解决它的方法。
我的代码如下:
instance Monad Test where
return a = Test $ e -> (Right a, mempty)
m >>= f = Test $ env -> case runTest m env of
(Right a, s) -> runTest (f a) env
(Left error) -> Left error
目前,这一行"(Left error) ->左error"显示一个异常"无法匹配预期类型:(要么error b, [String])与实际类型:要么a0 b1"。有人能帮我一下吗?谢谢你
类型(Either CError a, [String])
不包含任何形式Left err
的值;你可能指的是(Left err, s)
。