0 | module Data.Bitraversable
 1 |
 2 | import Control.Monad.Identity
 3 | import Data.Functor.Const
 4 | import Data.Morphisms
 5 |
 6 | public export
 7 | bimapDefault : Bitraversable p => (a -> c) -> (b -> d) -> p a b -> p c d
 8 | bimapDefault f g = runIdentity . bitraverse (Id . f) (Id . g)
 9 |
10 | public export
11 | bifoldrDefault : Bitraversable p =>
12 |                  (a -> acc -> acc) -> (b -> acc -> acc) -> acc -> p a b -> acc
13 | bifoldrDefault f g acc t =
14 |   (applyEndo . getConst $ bitraverse (endo f) (endo g) t) acc
15 |   where endo : forall x,y . (x -> y -> y) -> x -> Const (Endomorphism y) ()
16 |         endo f = MkConst . Endo . f
17 |