t; f r
| Err x => Err x
val result_monad = fn [x ::: Type] => mkMonad
{
Return = @@mreturn [x],
Bind = @@mbind [x]
}
From: Ur On Behalf Of Adam Chlipala
Sent: Thursday, 6 February 2020 19:40
To: ur@impredicative.com
Subject: Re: [Ur] Result monad
In this case, I think the straightfo
In this case, I think the straightforward answer is that result is
clearly not a monad, just on the basis of its kind! However, for any
fixed x, fn a => result a x can be a monad. I suggest reformulating
your last definition to be polymorphic in that way. Probably everything
resolves most
I try to create a monad:
datatype result a x =
Ok of a
| Err of x
fun mreturn [a] [x] (r : a) : result a x = Ok r
fun mbind [a] [b] [x] (r : result a x) (f : a -> result b x) : result b x =
case r of
Ok r => f r
| Err x => Err x
val result_monad = mkMonad
{