Copyright | (C) 2008-2016 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Data.Bifunctor.Biap
Description
Documentation
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
Instances
Bifunctor bi => Bifunctor (Biap bi) Source # | |
Bifoldable bi => Bifoldable (Biap bi) Source # | |
Bitraversable bi => Bitraversable (Biap bi) Source # | |
Defined in Data.Bifunctor.Biap Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Biap bi a b -> f (Biap bi c d) | |
Eq2 bi => Eq2 (Biap bi) Source # | |
Defined in Data.Bifunctor.Biap | |
Ord2 bi => Ord2 (Biap bi) Source # | |
Defined in Data.Bifunctor.Biap Methods liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> Biap bi a c -> Biap bi b d -> Ordering | |
Biapplicative bi => Biapplicative (Biap bi) Source # | |
Defined in Data.Bifunctor.Biap | |
Generic1 (Biap bi a :: Type -> Type) Source # | |
Monad (bi a) => Monad (Biap bi a) Source # | |
Functor (bi a) => Functor (Biap bi a) Source # | |
MonadFail (bi a) => MonadFail (Biap bi a) Source # | |
Defined in Data.Bifunctor.Biap | |
Applicative (bi a) => Applicative (Biap bi a) Source # | |
Foldable (bi a) => Foldable (Biap bi a) Source # | |
Defined in Data.Bifunctor.Biap Methods fold :: Monoid m => Biap bi a m -> m foldMap :: Monoid m => (a0 -> m) -> Biap bi a a0 -> m foldMap' :: Monoid m => (a0 -> m) -> Biap bi a a0 -> m foldr :: (a0 -> b -> b) -> b -> Biap bi a a0 -> b foldr' :: (a0 -> b -> b) -> b -> Biap bi a a0 -> b foldl :: (b -> a0 -> b) -> b -> Biap bi a a0 -> b foldl' :: (b -> a0 -> b) -> b -> Biap bi a a0 -> b foldr1 :: (a0 -> a0 -> a0) -> Biap bi a a0 -> a0 foldl1 :: (a0 -> a0 -> a0) -> Biap bi a a0 -> a0 toList :: Biap bi a a0 -> [a0] elem :: Eq a0 => a0 -> Biap bi a a0 -> Bool maximum :: Ord a0 => Biap bi a a0 -> a0 minimum :: Ord a0 => Biap bi a a0 -> a0 | |
Traversable (bi a) => Traversable (Biap bi a) Source # | |
Defined in Data.Bifunctor.Biap | |
Alternative (bi a) => Alternative (Biap bi a) Source # | |
MonadPlus (bi a) => MonadPlus (Biap bi a) Source # | |
Eq1 (bi a) => Eq1 (Biap bi a) Source # | |
Defined in Data.Bifunctor.Biap | |
Ord1 (bi a) => Ord1 (Biap bi a) Source # | |
Defined in Data.Bifunctor.Biap Methods liftCompare :: (a0 -> b -> Ordering) -> Biap bi a a0 -> Biap bi a b -> Ordering | |
(Biapplicative bi, Bounded a, Bounded b) => Bounded (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap | |
Enum (bi a b) => Enum (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap Methods succ :: Biap bi a b -> Biap bi a b pred :: Biap bi a b -> Biap bi a b fromEnum :: Biap bi a b -> Int enumFrom :: Biap bi a b -> [Biap bi a b] enumFromThen :: Biap bi a b -> Biap bi a b -> [Biap bi a b] enumFromTo :: Biap bi a b -> Biap bi a b -> [Biap bi a b] enumFromThenTo :: Biap bi a b -> Biap bi a b -> Biap bi a b -> [Biap bi a b] | |
Eq (bi a b) => Eq (Biap bi a b) Source # | |
(Biapplicative bi, Num a, Num b) => Num (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap | |
Ord (bi a b) => Ord (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap | |
Read (bi a b) => Read (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap | |
Show (bi a b) => Show (Biap bi a b) Source # | |
Generic (Biap bi a b) Source # | |
(Biapplicative bi, Semigroup a, Semigroup b) => Semigroup (Biap bi a b) Source # | |
(Biapplicative bi, Monoid a, Monoid b) => Monoid (Biap bi a b) Source # | |
type Rep1 (Biap bi a :: Type -> Type) Source # | |
Defined in Data.Bifunctor.Biap type Rep1 (Biap bi a :: Type -> Type) = D1 ('MetaData "Biap" "Data.Bifunctor.Biap" "bifunctors-5.5.11-2mt06i80omZ6vW2zUZn5Ka" 'True) (C1 ('MetaCons "Biap" 'PrefixI 'True) (S1 ('MetaSel ('Just "getBiap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (bi a)))) | |
type Rep (Biap bi a b) Source # | |
Defined in Data.Bifunctor.Biap type Rep (Biap bi a b) = D1 ('MetaData "Biap" "Data.Bifunctor.Biap" "bifunctors-5.5.11-2mt06i80omZ6vW2zUZn5Ka" 'True) (C1 ('MetaCons "Biap" 'PrefixI 'True) (S1 ('MetaSel ('Just "getBiap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (bi a b)))) |