diff lib/ur/list.ur @ 800:e92cfac1608f

Proper lifting of MonoEnv stored expressions; avoidance of onchange clobbering
author Adam Chlipala <adamc@hcoop.net>
date Thu, 14 May 2009 13:18:31 -0400
parents 6271f0e3c272
children 066493f7f008
line wrap: on
line diff
--- a/lib/ur/list.ur	Thu May 14 11:04:56 2009 -0400
+++ b/lib/ur/list.ur	Thu May 14 13:18:31 2009 -0400
@@ -39,3 +39,13 @@
     in
         mapX'
     end
+
+fun mapM (m ::: (Type -> Type)) (_ : monad m) (a ::: Type) (b ::: Type) f =
+    let
+        fun mapM' acc ls =
+            case ls of
+                [] => acc
+              | x :: ls => mapM' (x' <- f x; ls' <- acc; return (x' :: ls')) ls
+    in
+        mapM' (return [])
+    end