@@ -50,7 +50,13 @@ main = do
5050 testBifoldableIOrWith 10 100 42
5151
5252 log " Test Bitraversable on `inclusive or`"
53- testBitraversableIOr
53+ testBitraversableIOrWith id
54+
55+ log " Test bitraverseDefault"
56+ testBitraversableIOrWith BTD
57+
58+ log " Test bisequenceDefault"
59+ testBitraversableIOrWith BSD
5460
5561 log " All done!"
5662
@@ -207,12 +213,45 @@ testBifoldableIOrWith fst snd u = do
207213 assert $ bifoldMap Additive Additive (Fst fst) == Additive fst
208214 assert $ bifoldMap Additive Additive (Snd snd) == Additive snd
209215
210- testBitraversableIOr :: forall e . Eff (assert :: ASSERT | e ) Unit
211- testBitraversableIOr = do
212- assert $ bisequence (Both (Just true ) (Just false )) == Just (Both true false )
213- assert $ bisequence (Fst (Just true )) == Just (Fst true :: IOr Boolean Boolean )
214- assert $ bisequence (Snd (Just false )) == Just (Snd false :: IOr Boolean Boolean )
215- assert $ bitraverse Just Just (Both true false ) == Just (Both true false )
216- assert $ bitraverse Just Just (Fst true ) == Just (Fst true :: IOr Boolean Boolean )
217- assert $ bitraverse Just Just (Snd false ) == Just (Snd false :: IOr Boolean Boolean )
216+ testBitraversableIOrWith :: forall t e . (Bitraversable t , Eq (t Boolean Boolean )) =>
217+ (forall l r . IOr l r -> t l r ) ->
218+ Eff (assert :: ASSERT | e ) Unit
219+ testBitraversableIOrWith lift = do
220+ let just a = Just (lift a)
221+ assert $ bisequence (lift (Both (Just true ) (Just false ))) == just (Both true false )
222+ assert $ bisequence (lift (Fst (Just true ))) == just (Fst true :: IOr Boolean Boolean )
223+ assert $ bisequence (lift (Snd (Just false ))) == just (Snd false :: IOr Boolean Boolean )
224+ assert $ bitraverse Just Just (lift (Both true false )) == just (Both true false )
225+ assert $ bitraverse Just Just (lift (Fst true )) == just (Fst true :: IOr Boolean Boolean )
226+ assert $ bitraverse Just Just (lift (Snd false )) == just (Snd false :: IOr Boolean Boolean )
227+
228+
229+ -- structures for testing default `Bitraversable` implementations
230+
231+ newtype BitraverseDefault l r = BTD (IOr l r )
232+ newtype BisequenceDefault l r = BSD (IOr l r )
233+
234+ instance eqBTD :: (Eq l , Eq r ) => Eq (BitraverseDefault l r ) where eq (BTD l) (BTD r) = l == r
235+ instance eqBSD :: (Eq l , Eq r ) => Eq (BisequenceDefault l r ) where eq (BSD l) (BSD r) = l == r
236+
237+ instance bifunctorBTD :: Bifunctor BitraverseDefault where bimap f g (BTD m) = BTD (bimap f g m)
238+ instance bifunctorBSD :: Bifunctor BisequenceDefault where bimap f g (BSD m) = BSD (bimap f g m)
239+
240+ instance bifoldableBTD :: Bifoldable BitraverseDefault where
241+ bifoldMap f g (BTD m) = bifoldMap f g m
242+ bifoldr f g u (BTD m) = bifoldr f g u m
243+ bifoldl f g u (BTD m) = bifoldl f g u m
244+
245+ instance bifoldableBSD :: Bifoldable BisequenceDefault where
246+ bifoldMap f g (BSD m) = bifoldMap f g m
247+ bifoldr f g u (BSD m) = bifoldr f g u m
248+ bifoldl f g u (BSD m) = bifoldl f g u m
249+
250+ instance bitraversableBTD :: Bitraversable BitraverseDefault where
251+ bitraverse f g = bitraverseDefault f g
252+ bisequence (BTD m) = map BTD (bisequence m)
253+
254+ instance bitraversableBSD :: Bitraversable BisequenceDefault where
255+ bitraverse f g (BSD m) = map BSD (bitraverse f g m)
256+ bisequence m = bisequenceDefault m
218257
0 commit comments