diff options
author | 2010-02-28 13:06:10 -0500 | |
---|---|---|
committer | 2010-02-28 13:06:10 -0500 | |
commit | 704a9de8fe5e35ba24185048cf990456141a8bc0 (patch) | |
tree | 514a47d371580960d255dd83a28303a9035c319b /lib/ur/monad.ur | |
parent | 0c209d971e2813d9a5e3cac699f3f5c8ad278f7d (diff) |
Changing foldRX to mapX
Diffstat (limited to 'lib/ur/monad.ur')
-rw-r--r-- | lib/ur/monad.ur | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/ur/monad.ur b/lib/ur/monad.ur index e15da523..689e6b26 100644 --- a/lib/ur/monad.ur +++ b/lib/ur/monad.ur @@ -51,6 +51,16 @@ fun foldR3 [K] [m] (_ : monad m) [tf1 :: K -> Type] [tf2 :: K -> Type] [tf3 :: K (fn _ _ _ => return i) fl +fun mapR0 [K] [m] (_ : monad m) [tr :: K -> Type] + (f : nm :: Name -> t :: K -> m (tr t)) [r ::: {K}] (fl : folder r) = + @Top.fold [fn r => m ($(map tr r))] + (fn [nm :: Name] [t :: K] [rest :: {K}] [[nm] ~ rest] (acc : m ($(map tr rest))) => + v <- f [nm] [t]; + vs <- acc; + return (vs ++ {nm = v})) + (return {}) + fl + fun mapR [K] [m] (_ : monad m) [tf :: K -> Type] [tr :: K -> Type] (f : nm :: Name -> t :: K -> tf t -> m (tr t)) = @@foldR [m] _ [tf] [fn r => $(map tr r)] |