Pointwise lifting of a class over two arguments, using Biapplicative.
Classes that can be lifted include Monoid, Num and Bounded. Each method of those classes can be defined as lifting themselves over each argument of Biapplicative.
mempty = bipure mempty mempty
minBound = bipure minBound minBound
maxBound = bipure maxBound maxBound
fromInteger n = bipure (fromInteger n) (fromInteger n)
negate = bimap negate negate
(+) = biliftA2 (+) (+)
(<>) = biliftA2 (<>) (<>)
Biap is to Biapplicative as Ap is to Applicative.
Biap can be used with DerivingVia to derive a numeric instance
for pairs:
newtype Numpair a = Np (a, a)
deriving (S.Semigroup, Monoid, Num, Bounded)
via Biap (,) a a
Instances29Generic1, Bifoldable, Bifunctor, Bitraversable, Eq2, Ord2, …
Generic1 (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapBifoldable bi => Bifoldable (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapBifunctor bi => Bifunctor (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapBitraversable bi => Bitraversable (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapEq2 bi => Eq2 (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapOrd2 bi => Ord2 (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapBiapplicative bi => Biapplicative (Biap bi)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapMonad (bi a) => Monad (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapFunctor (bi a) => Functor (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapMonadFail (bi a) => MonadFail (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapApplicative (bi a) => Applicative (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapFoldable (bi a) => Foldable (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapTraversable (bi a) => Traversable (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapAlternative (bi a) => Alternative (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapMonadPlus (bi a) => MonadPlus (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapEq1 (bi a) => Eq1 (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapOrd1 (bi a) => Ord1 (Biap bi a)Defined in bifunctors-5.6.2 · Data.Bifunctor.Biap(Biapplicative bi, Bounded a, Bounded b) => Bounded (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapEnum (bi a b) => Enum (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapEq (bi a b) => Eq (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.Biap(Biapplicative bi, Num a, Num b) => Num (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapOrd (bi a b) => Ord (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapRead (bi a b) => Read (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapShow (bi a b) => Show (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.BiapGeneric (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.Biap(Biapplicative bi, Semigroup a, Semigroup b) => Semigroup (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.Biap(Biapplicative bi, Monoid a, Monoid b) => Monoid (Biap bi a b)Defined in bifunctors-5.6.2 · Data.Bifunctor.Biaptype Rep (Biap bi a b) = D1 ('MetaDataDefined in bifunctors-5.6.2 · Data.Bifunctor.Biap"Biap"
"Data.Bifunctor.Biap"
"bifunctors-5.6.2-CVCaN6VuvqC3GgUKVKmvdT"
'True) (C1 ('MetaCons"Biap"
'PrefixI 'True) (S1 ('MetaSel ('Just"getBiap"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (bi a b))))type Rep1 (Biap bi a) = D1 ('MetaDataDefined in bifunctors-5.6.2 · Data.Bifunctor.Biap"Biap"
"Data.Bifunctor.Biap"
"bifunctors-5.6.2-CVCaN6VuvqC3GgUKVKmvdT"
'True) (C1 ('MetaCons"Biap"
'PrefixI 'True) (S1 ('MetaSel ('Just"getBiap"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (bi a))))