Mercurial > urweb
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))