{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-} module Data.Bitraversable.Compat ( module Base , firstA , secondA ) where #if MIN_VERSION_base(4,10,0) import "base-compat" Data.Bitraversable.Compat as Base #else import "bifunctor-classes-compat" Data.Bitraversable as Base import Prelude.Compat #endif #if !MIN_VERSION_base(4,10,0) -- | Traverses only over the first argument. -- -- @'firstA' f ≡ 'bitraverse' f 'pure'@ -- ==== __Examples__ -- -- Basic usage: -- -- >>> firstA listToMaybe (Left []) -- Nothing -- -- >>> firstA listToMaybe (Left [1, 2, 3]) -- Just (Left 1) -- -- >>> firstA listToMaybe (Right [4, 5]) -- Just (Right [4, 5]) -- -- >>> firstA listToMaybe ([1, 2, 3], [4, 5]) -- Just (1,[4, 5]) -- -- >>> firstA listToMaybe ([], [4, 5]) -- Nothing -- @since 4.21.0.0 firstA :: Bitraversable t => Applicative f => (a -> f c) -> t a b -> f (t c b) firstA f = bitraverse f pure -- | Traverses only over the second argument. -- -- @'secondA' f ≡ 'bitraverse' 'pure' f@ -- -- ==== __Examples__ -- -- Basic usage: -- -- >>> secondA (find odd) (Left []) -- Just (Left []) -- -- >>> secondA (find odd) (Left [1, 2, 3]) -- Just (Left [1,2,3]) -- -- >>> secondA (find odd) (Right [4, 5]) -- Just (Right 5) -- -- >>> secondA (find odd) ([1, 2, 3], [4, 5]) -- Just ([1,2,3],5) -- -- >>> secondA (find odd) ([1,2,3], [4]) -- Nothing -- -- @since 4.21.0.0 secondA :: Bitraversable t => Applicative f => (b -> f c) -> t a b -> f (t a c) secondA f = bitraverse pure f #endif