そこで私はカスタムのエラーモナドを作成し、そのモナド則をどのように証明するかを考えていました。誰かが私を助けるために時間を割いてくれるなら、それは大歓迎です。ありがとう!
そして、ここに私のコードがあります:
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)