module Data.Edison.Coll.Utils where
import Prelude hiding (map,null,foldr,foldl,foldr1,foldl1,lookup,filter)
import Data.Edison.Coll
map :: (Coll cin a, CollX cout b) => (a -> b) -> (cin -> cout)
map :: forall cin a cout b.
(Coll cin a, CollX cout b) =>
(a -> b) -> cin -> cout
map a -> b
f cin
xs = forall c a b. Coll c a => (a -> b -> b) -> b -> c -> b
fold (\a
x cout
ys -> forall c a. CollX c a => a -> c -> c
insert (a -> b
f a
x) cout
ys) forall c a. CollX c a => c
empty cin
xs
mapPartial :: (Coll cin a, CollX cout b) => (a -> Maybe b) -> (cin -> cout)
mapPartial :: forall cin a cout b.
(Coll cin a, CollX cout b) =>
(a -> Maybe b) -> cin -> cout
mapPartial a -> Maybe b
f cin
xs = forall c a b. Coll c a => (a -> b -> b) -> b -> c -> b
fold (\ a
x cout
ys -> case a -> Maybe b
f a
x of
Just b
y -> forall c a. CollX c a => a -> c -> c
insert b
y cout
ys
Maybe b
Nothing -> cout
ys)
forall c a. CollX c a => c
empty cin
xs
unsafeMapMonotonic :: (OrdColl cin a, OrdCollX cout b) => (a -> b) -> (cin -> cout)
unsafeMapMonotonic :: forall cin a cout b.
(OrdColl cin a, OrdCollX cout b) =>
(a -> b) -> cin -> cout
unsafeMapMonotonic a -> b
f cin
xs = forall c a b. OrdColl c a => (a -> b -> b) -> b -> c -> b
foldr (forall c a. OrdCollX c a => a -> c -> c
unsafeInsertMin forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f) forall c a. CollX c a => c
empty cin
xs
unionMap :: (Coll cin a, CollX cout b) => (a -> cout) -> (cin -> cout)
unionMap :: forall cin a cout b.
(Coll cin a, CollX cout b) =>
(a -> cout) -> cin -> cout
unionMap a -> cout
f cin
xs = forall c a b. Coll c a => (a -> b -> b) -> b -> c -> b
fold (\a
x cout
ys -> forall c a. CollX c a => c -> c -> c
union (a -> cout
f a
x) cout
ys) forall c a. CollX c a => c
empty cin
xs