所以我掀起了一個自定義錯誤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