Re: [Ur] Result monad

2020-02-06 Thread Urs Wegmann
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

Re: [Ur] Result monad

2020-02-06 Thread Adam Chlipala
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

[Ur] Result monad

2020-02-06 Thread Urs Wegmann
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 {