所以我掀起了一个自定义错误monad,我想知道如何去证明它的一些monad法则。如果有人愿意花时间帮助我,那将是非常感谢。谢谢!对一个错误monad证明了一些monad法我写了
这里是我的代码:
data Error a = Ok a | Error String
instance Monad Error where
return = Ok
(>>=) = bindError
instance Show a => Show (Error a) where
show = showError
showError :: Show a => Error a -> String
showError x =
case x of
(Ok v) -> show v
(Error msg) -> show msg
bindError :: Error a -> (a -> Error b) -> Error b
bindError x f = case x of
(Ok v) -> f v
(Error msg) -> (Error msg)
你需要什么帮助?你已经有多远了? – 2011-03-07 00:57:53
在这一点上,我还没有取得任何进展。我需要帮助证明这些monad法律得到满足。 – 2011-03-07 01:01:25
当你在它的时候,你可能会把'fail = Error'放到你的'Monad Error'实例中。这会导致'do'符号中的模式匹配失败,因为您已经定义了错误,而不是更为卑鄙的错误。 – luqui 2011-03-07 06:41:31