Skip to content

Commit 4721788

Browse files
matthewleonpaf31
authored andcommitted
[breaking] distributive instance (#28)
* distributive instance * use TypeEquals to generalize Distributive instance
1 parent 21af1a2 commit 4721788

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

bower.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
],
1919
"dependencies": {
2020
"purescript-foldable-traversable": "^3.0.0",
21-
"purescript-prelude": "^3.0.0"
21+
"purescript-prelude": "^3.0.0",
22+
"purescript-distributive": "^3.0.0",
23+
"purescript-type-equality": "^2.1.0"
2224
}
2325
}

src/Data/Tuple.purs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Control.Lazy (class Lazy, defer)
1212
import Data.Bifoldable (class Bifoldable)
1313
import Data.Bifunctor (class Bifunctor)
1414
import Data.Bitraversable (class Bitraversable)
15+
import Data.Distributive (class Distributive, collectDefault)
1516
import Data.Eq (class Eq1)
1617
import Data.Foldable (class Foldable, foldMap)
1718
import Data.Functor.Invariant (class Invariant, imapF)
@@ -23,6 +24,8 @@ import Data.Newtype (unwrap)
2324
import Data.Ord (class Ord1)
2425
import Data.Traversable (class Traversable)
2526

27+
import Type.Equality (class TypeEquals, from)
28+
2629
-- | A simple product type for wrapping a pair of component values.
2730
data Tuple a b = Tuple a b
2831

@@ -151,6 +154,10 @@ instance bitraversableTuple :: Bitraversable Tuple where
151154
bitraverse f g (Tuple a b) = Tuple <$> f a <*> g b
152155
bisequence (Tuple a b) = Tuple <$> a <*> b
153156

157+
instance distributiveTuple :: TypeEquals a Unit => Distributive (Tuple a) where
158+
collect = collectDefault
159+
distribute = Tuple (from unit) <<< map snd
160+
154161
-- | Returns the first component of a tuple.
155162
fst :: forall a b. Tuple a b -> a
156163
fst (Tuple a _) = a

0 commit comments

Comments
 (0)