2 | module Data.Indexed.Independent
4 | import Data.Witherable.Dependent
5 | import Data.Witherable.Indexed
9 | record Independent {k : Type} (t : (k -> Type) -> Type) (v : Type) where
14 | DepFunctor i t => Functor (Independent t) where
15 | map f (Indep m) = Indep $
dmap (const f) m
18 | DepFunctor i t => IndFunctor i (Independent t) where
19 | imap f (Indep m) = Indep $
dmap f m
22 | DepFoldable i t => Foldable (Independent t) where
23 | foldl f z (Indep m) = dfoldl (\x, _, y => f x y) z m
24 | foldr f z (Indep m) = dfoldr (\_, x, y => f x y) z m
27 | (DepFoldable i t, DepFunctor i t) => IndFoldable i (Independent t) where
28 | ifoldl f z (Indep m) = dfoldl f z m
29 | ifoldr f z (Indep m) = dfoldr f z m
30 | iconcatMap f (Indep m) = dconcatMap f m
33 | (DepTraversable i t, DepFunctor i t) => Traversable (Independent t) where
34 | traverse f (Indep m) = Indep <$> dtraverse (const f) m
37 | (DepTraversable i t, DepFunctor i t, DepFoldable i t) => IndTraversable i (Independent t) where
38 | itraverse f (Indep m) = Indep <$> dtraverse f m
41 | (DepFilterable i t, DepFoldable i t) => Filterable (Independent t) where
42 | mapMaybe f (Indep m) = Indep $
dmapMaybe (const f) m
45 | (DepFilterable i t, DepFoldable i t) => IndFilterable i (Independent t) where
46 | imapMaybe f (Indep m) = Indep $
dmapMaybe f m
49 | (DepWitherable i t) => Witherable (Independent t) where
50 | wither f (Indep m) = Indep <$> dwither (const f) m
53 | [independentWitherable] (DepWitherable i t) => IndWitherable i (Independent t) where
54 | iwither f (Indep m) = Indep <$> dwither f m