diff lib/ur/monad.ur @ 1768:a613cae954ca

Some standard library additions from Edward Z. Yang
author Adam Chlipala <adam@chlipala.net>
date Sat, 19 May 2012 11:32:12 -0400
parents 18d18a70821e
children cbd294994c69
line wrap: on
line diff
--- a/lib/ur/monad.ur	Thu May 17 10:20:24 2012 -0400
+++ b/lib/ur/monad.ur	Sat May 19 11:32:12 2012 -0400
@@ -12,6 +12,8 @@
     v <- m;
     return (f v)
 
+val liftM = @@mp
+
 fun foldR [K] [m] (_ : monad m) [tf :: K -> Type] [tr :: {K} -> Type]
           (f : nm :: Name -> t :: K -> rest :: {K}
                -> [[nm] ~ rest] =>
@@ -122,3 +124,8 @@
          f [nm] [t] r1.nm r2.nm r3.nm)
      (fn _ _ _ => return ())
      fl
+
+fun liftM2 [m ::: Type -> Type] (_ : monad m) [a] [b] [c] (f : a -> b -> c) (mx : m a) (my : m b) : m c =
+    x <- mx;
+    y <- my;
+    return (f x y)