diff lib/ur/monad.urs @ 905:7a4b026e45dd

Library improvements; proper list [un]urlification; remove server-side ServerCalls; eta reduction in type inference
author Adam Chlipala <adamc@hcoop.net>
date Sun, 09 Aug 2009 16:13:27 -0400
parents d1d0b18afd3d
children 8e540df3294d
line wrap: on
line diff
--- a/lib/ur/monad.urs	Thu Aug 06 15:23:04 2009 -0400
+++ b/lib/ur/monad.urs	Sun Aug 09 16:13:27 2009 -0400
@@ -3,3 +3,27 @@
 
 val ignore : m ::: (Type -> Type) -> monad m -> t ::: Type
              -> m t -> m unit
+
+val foldR : K --> m ::: (Type -> Type) -> monad m
+            -> tf :: (K -> Type)
+            -> tr :: ({K} -> Type)
+            -> (nm :: Name -> t :: K -> rest :: {K}
+                -> [[nm] ~ rest] =>
+                tf t -> tr rest -> m (tr ([nm = t] ++ rest)))
+            -> tr []
+            -> r :: {K} -> folder r -> $(map tf r) -> m (tr r)
+
+val foldR2 : K --> m ::: (Type -> Type) -> monad m
+             -> tf1 :: (K -> Type) -> tf2 :: (K -> Type)
+             -> tr :: ({K} -> Type)
+             -> (nm :: Name -> t :: K -> rest :: {K}
+                 -> [[nm] ~ rest] =>
+                       tf1 t -> tf2 t -> tr rest -> m (tr ([nm = t] ++ rest)))
+             -> tr []
+             -> r :: {K} -> folder r -> $(map tf1 r) -> $(map tf2 r) -> m (tr r)
+
+val mapR : K --> m ::: (Type -> Type) -> monad m
+           -> tf :: (K -> Type)
+           -> tr :: (K -> Type)
+           -> (nm :: Name -> t :: K -> tf t -> m (tr t))
+           -> r :: {K} -> folder r -> $(map tf r) -> m ($(map tr r))