0 | module Data.Bitraversable
2 | import Control.Monad.Identity
3 | import Data.Functor.Const
4 | import Data.Morphisms
7 | bimapDefault : Bitraversable p => (a -> c) -> (b -> d) -> p a b -> p c d
8 | bimapDefault f g = runIdentity . bitraverse (Id . f) (Id . g)
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