@@ -13,7 +13,13 @@ module Data.Bitraversable
1313import Prelude
1414
1515import Data.Bifoldable (class Bifoldable , biall , biany , bifold , bifoldMap , bifoldMapDefaultL , bifoldMapDefaultR , bifoldl , bifoldlDefault , bifoldr , bifoldrDefault , bifor_ , bisequence_ , bitraverse_ )
16+ import Data.Traversable (class Traversable , traverse , sequence )
1617import Data.Bifunctor (class Bifunctor , bimap )
18+ import Data.Bifunctor.Clown (Clown (..))
19+ import Data.Bifunctor.Joker (Joker (..))
20+ import Data.Bifunctor.Flip (Flip (..))
21+ import Data.Bifunctor.Product (Product (..))
22+ import Data.Bifunctor.Wrap (Wrap (..))
1723
1824-- | `Bitraversable` represents data structures with two type arguments which can be
1925-- | traversed.
@@ -30,6 +36,26 @@ class (Bifunctor t, Bifoldable t) <= Bitraversable t where
3036 bitraverse :: forall f a b c d . Applicative f => (a -> f c ) -> (b -> f d ) -> t a b -> f (t c d )
3137 bisequence :: forall f a b . Applicative f => t (f a ) (f b ) -> f (t a b )
3238
39+ instance bitraversableClown :: Traversable f => Bitraversable (Clown f ) where
40+ bitraverse l _ (Clown f) = Clown <$> traverse l f
41+ bisequence (Clown f) = Clown <$> sequence f
42+
43+ instance bitraversableJoker :: Traversable f => Bitraversable (Joker f ) where
44+ bitraverse _ r (Joker f) = Joker <$> traverse r f
45+ bisequence (Joker f) = Joker <$> sequence f
46+
47+ instance bitraversableFlip :: Bitraversable p => Bitraversable (Flip p ) where
48+ bitraverse r l (Flip p) = Flip <$> bitraverse l r p
49+ bisequence (Flip p) = Flip <$> bisequence p
50+
51+ instance bitraversableProduct :: (Bitraversable f , Bitraversable g ) => Bitraversable (Product f g ) where
52+ bitraverse l r (Product f g) = Product <$> bitraverse l r f <*> bitraverse l r g
53+ bisequence (Product f g) = Product <$> bisequence f <*> bisequence g
54+
55+ instance bitraversableWrap :: Bitraversable p => Bitraversable (Wrap p ) where
56+ bitraverse l r (Wrap p) = Wrap <$> bitraverse l r p
57+ bisequence (Wrap p) = Wrap <$> bisequence p
58+
3359ltraverse
3460 :: forall t b c a f
3561 . (Bitraversable t , Applicative f )
0 commit comments