@@ -13,7 +13,13 @@ module Data.Bitraversable
13
13
import Prelude
14
14
15
15
import 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 )
16
17
import 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 (..))
17
23
18
24
-- | `Bitraversable` represents data structures with two type arguments which can be
19
25
-- | traversed.
@@ -30,6 +36,26 @@ class (Bifunctor t, Bifoldable t) <= Bitraversable t where
30
36
bitraverse :: forall f a b c d . Applicative f => (a -> f c ) -> (b -> f d ) -> t a b -> f (t c d )
31
37
bisequence :: forall f a b . Applicative f => t (f a ) (f b ) -> f (t a b )
32
38
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
+
33
59
ltraverse
34
60
:: forall t b c a f
35
61
. (Bitraversable t , Applicative f )
0 commit comments