【问题标题】:Haskell monad: Couldn't match expected type: (Either CError a, [String]) with actual type: Either a0 b0Haskell monad:无法匹配预期类型:(CError a,[String])与实际类型:要么 a0 b0
【发布时间】:2021-11-13 06:41:40
【问题描述】:
data CError = EA Int | EB String
   deriving (Eq, Show)

type Env = [(VName, Value)]

newtype Test a = Test {runTest :: Env -> (Either CError a, [String]) }

我正在学习haskell,现在正在尝试定义一个monad,但是遇到了这个错误并且找不到修复它的方法。

我的代码如下:

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) -> Left error”这一行显示异常“无法匹配预期类型:(Either CError b, [String]) 与实际类型:Either a0 b1”。有人可以帮我弄这个吗?谢谢

【问题讨论】:

  • 你看不懂错误信息或通用代码中的(Either CError a, [String])

标签: haskell monads


【解决方案1】:

(Either CError a, [String]) 类型不包含Left err 形式的任何值;你的意思可能是(Left err, s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多