@@ -12,6 +12,7 @@ import Control.Lazy (class Lazy, defer)
12
12
import Data.Bifoldable (class Bifoldable )
13
13
import Data.Bifunctor (class Bifunctor )
14
14
import Data.Bitraversable (class Bitraversable )
15
+ import Data.Distributive (class Distributive , collectDefault )
15
16
import Data.Eq (class Eq1 )
16
17
import Data.Foldable (class Foldable , foldMap )
17
18
import Data.Functor.Invariant (class Invariant , imapF )
@@ -23,6 +24,8 @@ import Data.Newtype (unwrap)
23
24
import Data.Ord (class Ord1 )
24
25
import Data.Traversable (class Traversable )
25
26
27
+ import Type.Equality (class TypeEquals , from )
28
+
26
29
-- | A simple product type for wrapping a pair of component values.
27
30
data Tuple a b = Tuple a b
28
31
@@ -151,6 +154,10 @@ instance bitraversableTuple :: Bitraversable Tuple where
151
154
bitraverse f g (Tuple a b) = Tuple <$> f a <*> g b
152
155
bisequence (Tuple a b) = Tuple <$> a <*> b
153
156
157
+ instance distributiveTuple :: TypeEquals a Unit => Distributive (Tuple a ) where
158
+ collect = collectDefault
159
+ distribute = Tuple (from unit) <<< map snd
160
+
154
161
-- | Returns the first component of a tuple.
155
162
fst :: forall a b . Tuple a b -> a
156
163
fst (Tuple a _) = a
0 commit comments