diff lib/ur/monad.urs @ 1175:79f487f51d9f

Monad.foldMapR
author Adam Chlipala <adamc@hcoop.net>
date Tue, 02 Mar 2010 10:33:49 -0500
parents ad15700272f6
children fd1a49b51db5
line wrap: on
line diff
--- a/lib/ur/monad.urs	Tue Mar 02 09:46:17 2010 -0500
+++ b/lib/ur/monad.urs	Tue Mar 02 10:33:49 2010 -0500
@@ -50,3 +50,13 @@
             -> tr :: (K -> Type)
             -> (nm :: Name -> t :: K -> tf1 t -> tf2 t -> m (tr t))
             -> r ::: {K} -> folder r -> $(map tf1 r) -> $(map tf2 r) -> m ($(map tr r))
+
+val foldMapR : K --> m ::: (Type -> Type) -> monad m
+               -> tf :: (K -> Type)
+               -> tf' :: (K -> Type)
+               -> tr :: ({K} -> Type)
+               -> (nm :: Name -> t :: K -> rest :: {K}
+                   -> [[nm] ~ rest] =>
+                   tf t -> tr rest -> m (tf' t * tr ([nm = t] ++ rest)))
+               -> tr []
+               -> r ::: {K} -> folder r -> $(map tf r) -> m ($(map tf' r) * tr r)