J'ai donc monté une monade d'erreur personnalisée et je me demandais comment j'allais prouver quelques lois de monade pour cela. Si quelqu'un est prêt à prendre le temps de m'aider, ce serait très apprécié. Merci!Prouver quelques lois de monade sur une monade d'erreur J'ai écrit
Et voici mon code:
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)
Pour quoi avez-vous besoin d'aide? Jusqu'où êtes-vous déjà arrivé? –
À ce stade, je n'ai fait aucun progrès à ce sujet. J'ai besoin d'aide pour démontrer que ces lois sont satisfaites. –
Pendant que vous y êtes, vous pouvez mettre 'fail = Error' dans votre instance' Monad Error'. Cela entraînera des échecs de correspondance de pattern dans la notation 'do' pour être un' Error' comme vous l'avez défini au lieu du 'error' plus dard. – luqui