newtype Biap bi a b
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
Biap :: bi a b -> Biap bi a b
getBiap :: Biap bi a b -> bi a b
Instances
27
instance (Eq bi, Eq a, Eq b) => Eq (Biap bi a b)instance (Ord bi, Ord a, Ord b) => Ord (Biap bi a b)instance (Show bi, Show a, Show b) => Show (Biap bi a b)instance (Read bi, Read a, Read b) => Read (Biap bi a b)instance (Enum bi, Enum a, Enum b) => Enum (Biap bi a b)instance (Functor bi, Functor a, Functor b) => Functor (Biap bi a b)instance (Foldable bi, Foldable a, Foldable b) => Foldable (Biap bi a b)instance (Traversable bi, Traversable a, Traversable b) => Traversable (Biap bi a b)instance (Alternative bi, Alternative a, Alternative b) => Alternative (Biap bi a b)instance (Applicative bi, Applicative a, Applicative b) => Applicative (Biap bi a b)instance (Generic bi, Generic a, Generic b) => Generic (Biap bi a b)instance (Generic1 bi, Generic1 a, Generic1 b) => Generic1 (Biap bi a b)instance (Monad bi, Monad a, Monad b) => Monad (Biap bi a b)instance (MonadFail bi, MonadFail a, MonadFail b) => MonadFail (Biap bi a b)instance (MonadPlus bi, MonadPlus a, MonadPlus b) => MonadPlus (Biap bi a b)instance (Eq1 bi, Eq1 a, Eq1 b) => Eq1 (Biap bi a b)instance (Ord1 bi, Ord1 a, Ord1 b) => Ord1 (Biap bi a b)instance (Bifunctor bi, Bifunctor a, Bifunctor b) => Bifunctor (Biap bi a b)instance (Biapplicative bi, Biapplicative a, Biapplicative b) => Biapplicative (Biap bi a b)instance (Bifoldable bi, Bifoldable a, Bifoldable b) => Bifoldable (Biap bi a b)instance (Eq2 bi, Eq2 a, Eq2 b) => Eq2 (Biap bi a b)instance (Ord2 bi, Ord2 a, Ord2 b) => Ord2 (Biap bi a b)instance Bitraversable bi => Bitraversable (Biap bi)instance (Biapplicative bi, S.Semigroup a, S.Semigroup b) => S.Semigroup (Biap bi a b)instance (Biapplicative bi, Monoid a, Monoid b) => Monoid (Biap bi a b)instance (Biapplicative bi, Bounded a, Bounded b) => Bounded (Biap bi a b)instance (Biapplicative bi, Num a, Num b) => Num (Biap bi a b)
- Maintainer
- Edward Kmett <ekmett@gmail.com>
- Portability
- portable
- Copyright
- (C) 2008-2016 Edward Kmett
- License
- BSD-style (see the file LICENSE)