diff options
author | 2010-02-28 13:06:10 -0500 | |
---|---|---|
committer | 2010-02-28 13:06:10 -0500 | |
commit | 703c91af7525838dff97f88245bf7482745e771e (patch) | |
tree | 514a47d371580960d255dd83a28303a9035c319b /lib/ur/monad.ur | |
parent | f59bbf0b942cd888c798c06ba6841bf94562a438 (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)] |