Copyright | (C) 2012-2017 Nicolas Frisby (C) 2015-2017 Ryan Scott |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Ryan Scott |
Portability | Portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Data.Functor.Invariant
Contents
Description
Haskell98 invariant functors (also known as exponential functors).
For more information, see Edward Kmett's article "Rotten Bananas":
Synopsis
- class Invariant f where
- invmap :: (a -> b) -> (b -> a) -> f a -> f b
- invmapFunctor :: Functor f => (a -> b) -> (b -> a) -> f a -> f b
- genericInvmap :: (Generic1 f, Invariant (Rep1 f)) => (a -> b) -> (b -> a) -> f a -> f b
- newtype WrappedFunctor f a = WrapFunctor {
- unwrapFunctor :: f a
- invmapContravariant :: Contravariant f => (a -> b) -> (b -> a) -> f a -> f b
- invmapProfunctor :: Profunctor p => (a -> b) -> (b -> a) -> p a a -> p b b
- invmapArrow :: Arrow arr => (a -> b) -> (b -> a) -> arr a a -> arr b b
- newtype WrappedContravariant f a = WrapContravariant {
- unwrapContravariant :: f a
- newtype InvariantProfunctor p a = InvariantProfunctor (p a a)
- newtype InvariantArrow c a = InvariantArrow (c a a)
- class Invariant2 f where
- invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> f a b -> f c d
- invmap2Bifunctor :: Bifunctor f => (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> f a b -> f c d
- newtype WrappedBifunctor (p :: k -> k1 -> Type) (a :: k) (b :: k1) = WrapBifunctor {
- unwrapBifunctor :: p a b
- invmap2Profunctor :: Profunctor f => (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> f a b -> f c d
- newtype WrappedProfunctor p a b = WrapProfunctor {
- unwrapProfunctor :: p a b
Invariant
Any * -> *
type parametric in the argument permits an instance of
Invariant
.
Instances should satisfy the following laws:
invmap id id = id invmap f2 f2' . invmap f1 f1' = invmap (f2 . f1) (f1' . f2')
Minimal complete definition
Nothing
Methods
Instances
Invariant SettableStateVar # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> SettableStateVar a -> SettableStateVar b # | |
Invariant StateVar # | from the |
Defined in Data.Functor.Invariant | |
Invariant ZipList # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Invariant Handler # | from Control.Exception |
Defined in Data.Functor.Invariant | |
Invariant Complex # | from Data.Complex |
Defined in Data.Functor.Invariant | |
Invariant Comparison # | from the |
Defined in Data.Functor.Invariant | |
Invariant Equivalence # | from the |
Defined in Data.Functor.Invariant | |
Invariant Predicate # | from the |
Defined in Data.Functor.Invariant | |
Invariant Identity # | |
Defined in Data.Functor.Invariant | |
Invariant First # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant Last # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant First # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant Last # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant Max # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant Min # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant Dual # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant Endo # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant Product # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant Sum # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant NonEmpty # | from Data.List.NonEmpty |
Defined in Data.Functor.Invariant | |
Invariant STM # | from the |
Defined in Data.Functor.Invariant | |
Invariant Par1 # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant ArgDescr # | |
Defined in Data.Functor.Invariant | |
Invariant ArgOrder # | |
Defined in Data.Functor.Invariant | |
Invariant OptDescr # | |
Defined in Data.Functor.Invariant | |
Invariant ReadP # | |
Defined in Data.Functor.Invariant | |
Invariant ReadPrec # | |
Defined in Data.Functor.Invariant | |
Invariant IntMap # | from the |
Defined in Data.Functor.Invariant | |
Invariant Seq # | from the |
Defined in Data.Functor.Invariant | |
Invariant ViewL # | from the |
Defined in Data.Functor.Invariant | |
Invariant ViewR # | from the |
Defined in Data.Functor.Invariant | |
Invariant Tree # | from the |
Defined in Data.Functor.Invariant | |
Invariant IO # | |
Defined in Data.Functor.Invariant | |
Invariant Maybe # | |
Defined in Data.Functor.Invariant | |
Invariant List # | |
Defined in Data.Functor.Invariant | |
Monad m => Invariant (WrappedMonad m) # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Arrow a => Invariant (ArrowMonad a) # | from Control.Arrow |
Defined in Data.Functor.Invariant | |
Invariant (ST s) # | |
Defined in Data.Functor.Invariant | |
Invariant (Either a) # | |
Defined in Data.Functor.Invariant | |
Invariant (Op a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Proxy :: Type -> Type) # | from Data.Proxy |
Defined in Data.Functor.Invariant | |
Invariant (Arg a) # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant (Array i) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (U1 :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UAddr :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UChar :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UDouble :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UFloat :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UInt :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (UWord :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (V1 :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (ST s) # | |
Defined in Data.Functor.Invariant | |
Invariant (Map k) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Lift f) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (MaybeT m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (HashMap k) # | from the |
Defined in Data.Functor.Invariant | |
Invariant ((,) a) # | |
Defined in Data.Functor.Invariant | |
Arrow arr => Invariant (WrappedArrow arr a) # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (Kleisli m a) # | from Control.Arrow |
Defined in Data.Functor.Invariant | |
Invariant (Const a :: Type -> Type) # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Alt f) # | from Data.Monoid |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Rec1 f) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Fix p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Join p) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (Compose f g) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (ComposeCF f g) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (ComposeFC f g) # | from the |
Defined in Data.Functor.Invariant | |
Arrow c => Invariant (InvariantArrow c) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> InvariantArrow c a -> InvariantArrow c b # | |
Profunctor p => Invariant (InvariantProfunctor p) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> InvariantProfunctor p a -> InvariantProfunctor p b # | |
Contravariant f => Invariant (WrappedContravariant f) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> WrappedContravariant f a -> WrappedContravariant f b # | |
Functor f => Invariant (WrappedFunctor f) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> WrappedFunctor f a -> WrappedFunctor f b # | |
Invariant (CopastroSum p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> CopastroSum p a a0 -> CopastroSum p a b # | |
Invariant (CotambaraSum p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> CotambaraSum p a a0 -> CotambaraSum p a b # | |
Invariant (PastroSum p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (TambaraSum p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> TambaraSum p a a0 -> TambaraSum p a b # | |
Invariant2 p => Invariant (Closure p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Environment p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> Environment p a a0 -> Environment p a b # | |
Invariant (FreeMapping p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> FreeMapping p a a0 -> FreeMapping p a b # | |
Invariant2 p => Invariant (Coprep p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Prep p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Copastro p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Cotambara p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Pastro p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Tambara p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (FreeTraversing p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> FreeTraversing p a a0 -> FreeTraversing p a b # | |
Invariant (Coyoneda p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Yoneda p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Tagged s) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Backwards f) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (ExceptT e m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (IdentityT m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (ReaderT r m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (StateT s m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (StateT s m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (WriterT w m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (WriterT w m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Constant a :: Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Reverse f) # | from the |
Defined in Data.Functor.Invariant | |
Invariant ((,,) a b) # | |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (Product f g) # | from Data.Functor.Product |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (Sum f g) # | from Data.Functor.Sum |
Defined in Data.Functor.Invariant | |
(Invariant l, Invariant r) => Invariant (l :*: r) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
(Invariant l, Invariant r) => Invariant (l :+: r) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (K1 i c :: Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (Cokleisli w a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Costar f a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (Forget r a :: Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (Star f a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant (ContT r m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant ((,,,) a b c) # | |
Defined in Data.Functor.Invariant | |
Invariant ((->) a) # | |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (Compose f g) # | from Data.Functor.Compose |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant g) => Invariant (f :.: g) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant (M1 i t f) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant (Clown f a :: Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Flip p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant g => Invariant (Joker g a) # | from the |
Defined in Data.Functor.Invariant | |
Bifunctor p => Invariant (WrappedBifunctor p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> WrappedBifunctor p a a0 -> WrappedBifunctor p a b # | |
Profunctor p => Invariant (WrappedProfunctor p a) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> WrappedProfunctor p a a0 -> WrappedProfunctor p a b # | |
Invariant2 p => Invariant (Codensity p a) # | from the |
Defined in Data.Functor.Invariant | |
Arrow arr => Invariant (WrappedArrow arr a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> WrappedArrow arr a a0 -> WrappedArrow arr a b # | |
Invariant m => Invariant (RWST r w s m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant (RWST r w s m) # | from the |
Defined in Data.Functor.Invariant | |
Invariant ((,,,,) a b c d) # | |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant2 p) => Invariant (Tannen f p a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant (Procompose p q a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> Procompose p q a a0 -> Procompose p q a b # | |
Invariant2 p => Invariant (Rift p q a) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 q => Invariant (Ran p q a) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant2 p, Invariant g) => Invariant (Biff p f g a) # | from the |
Defined in Data.Functor.Invariant |
invmapFunctor :: Functor f => (a -> b) -> (b -> a) -> f a -> f b #
GHC.Generics
With GHC 7.2 or later, Invariant
instances can be defined easily using GHC
generics like so:
{-# LANGUAGE DeriveGeneric, FlexibleContexts #-}
import Data.Functor.Invariant
import GHC.Generics
data T f a = T (f a) deriving Generic1
instance Invariant f => Invariant
(T f)
Be aware that generic Invariant
instances cannot be derived for data types
that have function arguments in which the last type parameter appears in a
position other than the result type (e.g., data Fun a = Fun (a -> a)
). For
these, you can derive them using the Data.Functor.Invariant.TH module.
genericInvmap :: (Generic1 f, Invariant (Rep1 f)) => (a -> b) -> (b -> a) -> f a -> f b #
A generic implementation of invmap
.
newtype WrappedFunctor f a #
Constructors
WrapFunctor | |
Fields
|
Instances
invmapContravariant :: Contravariant f => (a -> b) -> (b -> a) -> f a -> f b #
Every Contravariant
functor is also an Invariant
functor.
invmapProfunctor :: Profunctor p => (a -> b) -> (b -> a) -> p a a -> p b b #
A Profunctor
with the same input and output types can be seen as an Invariant
functor.
invmapArrow :: Arrow arr => (a -> b) -> (b -> a) -> arr a a -> arr b b #
An Arrow
with the same input and output types can be seen as an Invariant
functor.
newtype WrappedContravariant f a #
Wrap a Contravariant
functor to be used as a member of Invariant
.
Constructors
WrapContravariant | |
Fields
|
Instances
newtype InvariantProfunctor p a #
A Profunctor
with the same input and output types can be seen as an Invariant
functor.
Constructors
InvariantProfunctor (p a a) |
Instances
Profunctor p => Invariant (InvariantProfunctor p) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> InvariantProfunctor p a -> InvariantProfunctor p b # |
newtype InvariantArrow c a #
An Arrow
with the same input and output types can be seen as an Invariant
functor.
Constructors
InvariantArrow (c a a) |
Instances
Arrow c => Invariant (InvariantArrow c) # | |
Defined in Data.Functor.Invariant Methods invmap :: (a -> b) -> (b -> a) -> InvariantArrow c a -> InvariantArrow c b # |
Invariant2
class Invariant2 f where #
Any * -> * -> *
type parametric in both arguments permits an instance of
Invariant2
.
Instances should satisfy the following laws:
invmap2 id id id id = id invmap2 f2 f2' g2 g2' . invmap2 f1 f1' g1 g1' = invmap2 (f2 . f1) (f1' . f2') (g2 . g1) (g1' . g2')
Instances
Invariant2 Either # | |
Defined in Data.Functor.Invariant | |
Invariant2 Op # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 Arg # | from Data.Semigroup |
Defined in Data.Functor.Invariant | |
Invariant2 (,) # | |
Defined in Data.Functor.Invariant | |
Arrow arr => Invariant2 (WrappedArrow arr) # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Invariant m => Invariant2 (Kleisli m) # | from Control.Arrow |
Defined in Data.Functor.Invariant | |
Invariant2 (Const :: Type -> Type -> Type) # | from Control.Applicative |
Defined in Data.Functor.Invariant | |
Invariant2 (CopastroSum p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> CopastroSum p a b -> CopastroSum p c d # | |
Invariant2 (CotambaraSum p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> CotambaraSum p a b -> CotambaraSum p c d # | |
Invariant2 (PastroSum p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant2 (TambaraSum p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> TambaraSum p a b -> TambaraSum p c d # | |
Invariant2 p => Invariant2 (Closure p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Environment p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> Environment p a b -> Environment p c d # | |
Invariant2 p => Invariant2 (CofreeMapping p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> CofreeMapping p a b -> CofreeMapping p c d # | |
Invariant2 (FreeMapping p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> FreeMapping p a b -> FreeMapping p c d # | |
Invariant2 (Copastro p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Cotambara p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Pastro p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant2 (Tambara p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant2 (CofreeTraversing p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> CofreeTraversing p a b -> CofreeTraversing p c d # | |
Invariant2 (FreeTraversing p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> FreeTraversing p a b -> FreeTraversing p c d # | |
Invariant2 (Coyoneda p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Yoneda p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Tagged :: Type -> Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Constant :: Type -> Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 ((,,) a) # | |
Defined in Data.Functor.Invariant | |
Invariant2 (K1 i :: Type -> Type -> Type) # | from GHC.Generics |
Defined in Data.Functor.Invariant | |
Invariant w => Invariant2 (Cokleisli w) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant2 (Costar f) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 (Forget r :: Type -> Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant2 (Star f) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 ((,,,) a b) # | |
Defined in Data.Functor.Invariant | |
Invariant2 (->) # | |
Defined in Data.Functor.Invariant | |
Invariant f => Invariant2 (Clown f :: Type -> Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Invariant2 p => Invariant2 (Flip p) # | from the |
Defined in Data.Functor.Invariant | |
Invariant g => Invariant2 (Joker g :: Type -> Type -> Type) # | from the |
Defined in Data.Functor.Invariant | |
Bifunctor p => Invariant2 (WrappedBifunctor p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> WrappedBifunctor p a b -> WrappedBifunctor p c d # | |
Profunctor p => Invariant2 (WrappedProfunctor p) # | |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> WrappedProfunctor p a b -> WrappedProfunctor p c d # | |
Invariant2 p => Invariant2 (Codensity p) # | from the |
Defined in Data.Functor.Invariant | |
Arrow arr => Invariant2 (WrappedArrow arr) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> WrappedArrow arr a b -> WrappedArrow arr c d # | |
Invariant2 ((,,,,) a b c) # | |
Defined in Data.Functor.Invariant | |
(Invariant2 f, Invariant2 g) => Invariant2 (Product f g) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant2 p, Invariant2 q) => Invariant2 (Sum p q) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant2 p) => Invariant2 (Tannen f p) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant f, Invariant2 p) => Invariant2 (Cayley f p) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant2 p, Invariant2 q) => Invariant2 (Procompose p q) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> Procompose p q a b -> Procompose p q c d # | |
(Invariant2 p, Invariant2 q) => Invariant2 (Rift p q) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant2 p, Invariant2 q) => Invariant2 (Ran p q) # | from the |
Defined in Data.Functor.Invariant | |
(Invariant2 p, Invariant f, Invariant g) => Invariant2 (Biff p f g) # | from the |
Defined in Data.Functor.Invariant |
invmap2Bifunctor :: Bifunctor f => (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> f a b -> f c d #
Every Bifunctor
is also an Invariant2
functor.
newtype WrappedBifunctor (p :: k -> k1 -> Type) (a :: k) (b :: k1) #
Make a Functor
over the second argument of a Bifunctor
.
Constructors
WrapBifunctor | |
Fields
|
Instances
Generic1 (WrappedBifunctor p a :: k1 -> Type) | |
Defined in Data.Bifunctor.Wrapped Associated Types type Rep1 (WrappedBifunctor p a) :: k -> Type Methods from1 :: forall (a0 :: k). WrappedBifunctor p a a0 -> Rep1 (WrappedBifunctor p a) a0 to1 :: forall (a0 :: k). Rep1 (WrappedBifunctor p a) a0 -> WrappedBifunctor p a a0 | |
Bifoldable p => Bifoldable (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods bifold :: Monoid m => WrappedBifunctor p m m -> m bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> WrappedBifunctor p a b -> m bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> WrappedBifunctor p a b -> c bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> WrappedBifunctor p a b -> c | |
Bifoldable1 p => Bifoldable1 (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods bifold1 :: Semigroup m => WrappedBifunctor p m m -> m bifoldMap1 :: Semigroup m => (a -> m) -> (b -> m) -> WrappedBifunctor p a b -> m | |
Bifunctor p => Bifunctor (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods bimap :: (a -> b) -> (c -> d) -> WrappedBifunctor p a c -> WrappedBifunctor p b d first :: (a -> b) -> WrappedBifunctor p a c -> WrappedBifunctor p b c second :: (b -> c) -> WrappedBifunctor p a b -> WrappedBifunctor p a c | |
Bitraversable p => Bitraversable (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> WrappedBifunctor p a b -> f (WrappedBifunctor p c d) | |
Eq2 p => Eq2 (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods liftEq2 :: (a -> b -> Bool) -> (c -> d -> Bool) -> WrappedBifunctor p a c -> WrappedBifunctor p b d -> Bool | |
Ord2 p => Ord2 (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods liftCompare2 :: (a -> b -> Ordering) -> (c -> d -> Ordering) -> WrappedBifunctor p a c -> WrappedBifunctor p b d -> Ordering | |
Read2 p => Read2 (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods liftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (WrappedBifunctor p a b) liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [WrappedBifunctor p a b] liftReadPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec (WrappedBifunctor p a b) liftReadListPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec [WrappedBifunctor p a b] | |
Show2 p => Show2 (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods liftShowsPrec2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> Int -> WrappedBifunctor p a b -> ShowS liftShowList2 :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> (Int -> b -> ShowS) -> ([b] -> ShowS) -> [WrappedBifunctor p a b] -> ShowS | |
Biapplicative p => Biapplicative (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped Methods bipure :: a -> b -> WrappedBifunctor p a b # (<<*>>) :: WrappedBifunctor p (a -> b) (c -> d) -> WrappedBifunctor p a c -> WrappedBifunctor p b d # biliftA2 :: (a -> b -> c) -> (d -> e -> f) -> WrappedBifunctor p a d -> WrappedBifunctor p b e -> WrappedBifunctor p c f # (*>>) :: WrappedBifunctor p a b -> WrappedBifunctor p c d -> WrappedBifunctor p c d # (<<*) :: WrappedBifunctor p a b -> WrappedBifunctor p c d -> WrappedBifunctor p a b # | |
Bifunctor p => Invariant2 (WrappedBifunctor p) # | from the |
Defined in Data.Functor.Invariant Methods invmap2 :: (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> WrappedBifunctor p a b -> WrappedBifunctor p c d # | |
Bifoldable p => Foldable (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods fold :: Monoid m => WrappedBifunctor p a m -> m foldMap :: Monoid m => (a0 -> m) -> WrappedBifunctor p a a0 -> m foldMap' :: Monoid m => (a0 -> m) -> WrappedBifunctor p a a0 -> m foldr :: (a0 -> b -> b) -> b -> WrappedBifunctor p a a0 -> b foldr' :: (a0 -> b -> b) -> b -> WrappedBifunctor p a a0 -> b foldl :: (b -> a0 -> b) -> b -> WrappedBifunctor p a a0 -> b foldl' :: (b -> a0 -> b) -> b -> WrappedBifunctor p a a0 -> b foldr1 :: (a0 -> a0 -> a0) -> WrappedBifunctor p a a0 -> a0 foldl1 :: (a0 -> a0 -> a0) -> WrappedBifunctor p a a0 -> a0 toList :: WrappedBifunctor p a a0 -> [a0] null :: WrappedBifunctor p a a0 -> Bool length :: WrappedBifunctor p a a0 -> Int elem :: Eq a0 => a0 -> WrappedBifunctor p a a0 -> Bool maximum :: Ord a0 => WrappedBifunctor p a a0 -> a0 minimum :: Ord a0 => WrappedBifunctor p a a0 -> a0 sum :: Num a0 => WrappedBifunctor p a a0 -> a0 product :: Num a0 => WrappedBifunctor p a a0 -> a0 | |
(Eq2 p, Eq a) => Eq1 (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods liftEq :: (a0 -> b -> Bool) -> WrappedBifunctor p a a0 -> WrappedBifunctor p a b -> Bool | |
(Ord2 p, Ord a) => Ord1 (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods liftCompare :: (a0 -> b -> Ordering) -> WrappedBifunctor p a a0 -> WrappedBifunctor p a b -> Ordering | |
(Read2 p, Read a) => Read1 (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods liftReadsPrec :: (Int -> ReadS a0) -> ReadS [a0] -> Int -> ReadS (WrappedBifunctor p a a0) liftReadList :: (Int -> ReadS a0) -> ReadS [a0] -> ReadS [WrappedBifunctor p a a0] liftReadPrec :: ReadPrec a0 -> ReadPrec [a0] -> ReadPrec (WrappedBifunctor p a a0) liftReadListPrec :: ReadPrec a0 -> ReadPrec [a0] -> ReadPrec [WrappedBifunctor p a a0] | |
(Show2 p, Show a) => Show1 (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods liftShowsPrec :: (Int -> a0 -> ShowS) -> ([a0] -> ShowS) -> Int -> WrappedBifunctor p a a0 -> ShowS liftShowList :: (Int -> a0 -> ShowS) -> ([a0] -> ShowS) -> [WrappedBifunctor p a a0] -> ShowS | |
Bitraversable p => Traversable (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods traverse :: Applicative f => (a0 -> f b) -> WrappedBifunctor p a a0 -> f (WrappedBifunctor p a b) sequenceA :: Applicative f => WrappedBifunctor p a (f a0) -> f (WrappedBifunctor p a a0) mapM :: Monad m => (a0 -> m b) -> WrappedBifunctor p a a0 -> m (WrappedBifunctor p a b) sequence :: Monad m => WrappedBifunctor p a (m a0) -> m (WrappedBifunctor p a a0) | |
Bifunctor p => Functor (WrappedBifunctor p a) | |
Defined in Data.Bifunctor.Wrapped Methods fmap :: (a0 -> b) -> WrappedBifunctor p a a0 -> WrappedBifunctor p a b # (<$) :: a0 -> WrappedBifunctor p a b -> WrappedBifunctor p a a0 # | |
Bifunctor p => Invariant (WrappedBifunctor p a) # | from the |
Defined in Data.Functor.Invariant Methods invmap :: (a0 -> b) -> (b -> a0) -> WrappedBifunctor p a a0 -> WrappedBifunctor p a b # | |
Generic (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped Associated Types type Rep (WrappedBifunctor p a b) :: Type -> Type Methods from :: WrappedBifunctor p a b -> Rep (WrappedBifunctor p a b) x to :: Rep (WrappedBifunctor p a b) x -> WrappedBifunctor p a b | |
Read (p a b) => Read (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped Methods readsPrec :: Int -> ReadS (WrappedBifunctor p a b) readList :: ReadS [WrappedBifunctor p a b] readPrec :: ReadPrec (WrappedBifunctor p a b) readListPrec :: ReadPrec [WrappedBifunctor p a b] | |
Show (p a b) => Show (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped Methods showsPrec :: Int -> WrappedBifunctor p a b -> ShowS show :: WrappedBifunctor p a b -> String showList :: [WrappedBifunctor p a b] -> ShowS | |
Eq (p a b) => Eq (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped Methods (==) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool (/=) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool | |
Ord (p a b) => Ord (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped Methods compare :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Ordering (<) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool (<=) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool (>) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool (>=) :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> Bool max :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> WrappedBifunctor p a b min :: WrappedBifunctor p a b -> WrappedBifunctor p a b -> WrappedBifunctor p a b | |
type Rep1 (WrappedBifunctor p a :: k1 -> Type) | |
Defined in Data.Bifunctor.Wrapped type Rep1 (WrappedBifunctor p a :: k1 -> Type) = D1 ('MetaData "WrappedBifunctor" "Data.Bifunctor.Wrapped" "bifunctors-5.6.1-L69QUmtfyuCC1y2evrVacR" 'True) (C1 ('MetaCons "WrapBifunctor" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapBifunctor") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (p a)))) | |
type Rep (WrappedBifunctor p a b) | |
Defined in Data.Bifunctor.Wrapped type Rep (WrappedBifunctor p a b) = D1 ('MetaData "WrappedBifunctor" "Data.Bifunctor.Wrapped" "bifunctors-5.6.1-L69QUmtfyuCC1y2evrVacR" 'True) (C1 ('MetaCons "WrapBifunctor" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapBifunctor") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (p a b)))) |
invmap2Profunctor :: Profunctor f => (a -> c) -> (c -> a) -> (b -> d) -> (d -> b) -> f a b -> f c d #
Every Profunctor
is also an Invariant2
functor.
newtype WrappedProfunctor p a b #
Wrap a Profunctor
to be used as a member of Invariant2
.
Constructors
WrapProfunctor | |
Fields
|