[Ur] Result monad
Adam Chlipala
adamc at csail.mit.edu
Thu Feb 6 13:39:32 EST 2020
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 nicely if you swap the order of arguments to result.
On 2/6/20 1:34 PM, Urs Wegmann wrote:
>
> 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
>
> {
>
> Return = @@mreturn,
>
> Bind = @@mbind
>
> }
>
> I think the error message tries to tell me that x is not defined
> enough. Is there a way to fix this? When I remove x from result, it
> compiles.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20200206/9d3f4fa5/attachment.html>
More information about the Ur
mailing list