invariant 0.2.1 → 0.2.2
raw patch · 4 files changed
+41/−25 lines, 4 filesdep ~basedep ~transformersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, transformers
API changes (from Hackage documentation)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (Compose f g)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (ComposeCF f g)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (ComposeFC f g)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (Product f g)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (Sum f g)
- Data.Functor.Invariant: instance (Invariant f, Invariant g) => Invariant (f :.: g)
- Data.Functor.Invariant: instance (Invariant f, Invariant2 p) => Invariant (Tannen f p a)
- Data.Functor.Invariant: instance (Invariant f, Invariant2 p) => Invariant2 (Cayley f p)
- Data.Functor.Invariant: instance (Invariant f, Invariant2 p) => Invariant2 (Tannen f p)
- Data.Functor.Invariant: instance (Invariant l, Invariant r) => Invariant (l :*: r)
- Data.Functor.Invariant: instance (Invariant l, Invariant r) => Invariant (l :+: r)
- Data.Functor.Invariant: instance (Invariant2 f, Invariant2 g) => Invariant2 (Product f g)
- Data.Functor.Invariant: instance (Invariant2 p, Invariant f, Invariant g) => Invariant2 (Biff p f g)
- Data.Functor.Invariant: instance (Invariant2 p, Invariant g) => Invariant (Biff p f g a)
- Data.Functor.Invariant: instance (Invariant2 p, Invariant2 q) => Invariant2 (Procompose p q)
- Data.Functor.Invariant: instance (Invariant2 p, Invariant2 q) => Invariant2 (Ran p q)
- Data.Functor.Invariant: instance (Invariant2 p, Invariant2 q) => Invariant2 (Rift p q)
- Data.Functor.Invariant: instance Alternative f => Alternative (WrappedFunctor f)
- Data.Functor.Invariant: instance Applicative f => Applicative (WrappedFunctor f)
- Data.Functor.Invariant: instance Arrow a => Invariant (ArrowMonad a)
- Data.Functor.Invariant: instance Arrow arr => Invariant (WrappedArrow arr a)
- Data.Functor.Invariant: instance Arrow arr => Invariant2 (WrappedArrow arr)
- Data.Functor.Invariant: instance Bifunctor p => Invariant (WrappedBifunctor p a)
- Data.Functor.Invariant: instance Bifunctor p => Invariant2 (WrappedBifunctor p)
- Data.Functor.Invariant: instance Choice p => Choice (WrappedProfunctor p)
- Data.Functor.Invariant: instance Closed p => Closed (WrappedProfunctor p)
- Data.Functor.Invariant: instance Cochoice p => Cochoice (WrappedProfunctor p)
- Data.Functor.Invariant: instance Contravariant f => Contravariant (WrappedContravariant f)
- Data.Functor.Invariant: instance Contravariant f => Invariant (WrappedContravariant f)
- Data.Functor.Invariant: instance Costrong p => Costrong (WrappedProfunctor p)
- Data.Functor.Invariant: instance Decidable f => Decidable (WrappedContravariant f)
- Data.Functor.Invariant: instance Divisible f => Divisible (WrappedContravariant f)
- Data.Functor.Invariant: instance Eq (f a) => Eq (WrappedContravariant f a)
- Data.Functor.Invariant: instance Eq (f a) => Eq (WrappedFunctor f a)
- Data.Functor.Invariant: instance Eq (p a b) => Eq (WrappedProfunctor p a b)
- Data.Functor.Invariant: instance Foldable f => Foldable (WrappedFunctor f)
- Data.Functor.Invariant: instance Functor f => Functor (WrappedFunctor f)
- Data.Functor.Invariant: instance Functor f => Invariant (WrappedFunctor f)
- Data.Functor.Invariant: instance Invariant ((,) a)
- Data.Functor.Invariant: instance Invariant ((,,) a b)
- Data.Functor.Invariant: instance Invariant ((,,,) a b c)
- Data.Functor.Invariant: instance Invariant ((,,,,) a b c d)
- Data.Functor.Invariant: instance Invariant ((->) a)
- Data.Functor.Invariant: instance Invariant (Arg a)
- Data.Functor.Invariant: instance Invariant (Clown f a)
- Data.Functor.Invariant: instance Invariant (Const a)
- Data.Functor.Invariant: instance Invariant (Constant a)
- Data.Functor.Invariant: instance Invariant (ContT r m)
- Data.Functor.Invariant: instance Invariant (Costar f a)
- Data.Functor.Invariant: instance Invariant (Either a)
- Data.Functor.Invariant: instance Invariant (Forget r a)
- Data.Functor.Invariant: instance Invariant (HashMap k)
- Data.Functor.Invariant: instance Invariant (K1 i c)
- Data.Functor.Invariant: instance Invariant (Map k)
- Data.Functor.Invariant: instance Invariant (Op a)
- Data.Functor.Invariant: instance Invariant (ST s)
- Data.Functor.Invariant: instance Invariant (Tagged s)
- Data.Functor.Invariant: instance Invariant ArgDescr
- Data.Functor.Invariant: instance Invariant ArgOrder
- Data.Functor.Invariant: instance Invariant Comparison
- Data.Functor.Invariant: instance Invariant Dual
- Data.Functor.Invariant: instance Invariant Endo
- Data.Functor.Invariant: instance Invariant Equivalence
- Data.Functor.Invariant: instance Invariant First
- Data.Functor.Invariant: instance Invariant Handler
- Data.Functor.Invariant: instance Invariant IO
- Data.Functor.Invariant: instance Invariant Identity
- Data.Functor.Invariant: instance Invariant IntMap
- Data.Functor.Invariant: instance Invariant Last
- Data.Functor.Invariant: instance Invariant Max
- Data.Functor.Invariant: instance Invariant Maybe
- Data.Functor.Invariant: instance Invariant Min
- Data.Functor.Invariant: instance Invariant NonEmpty
- Data.Functor.Invariant: instance Invariant OptDescr
- Data.Functor.Invariant: instance Invariant Option
- Data.Functor.Invariant: instance Invariant Par1
- Data.Functor.Invariant: instance Invariant Predicate
- Data.Functor.Invariant: instance Invariant Proxy
- Data.Functor.Invariant: instance Invariant ReadP
- Data.Functor.Invariant: instance Invariant ReadPrec
- Data.Functor.Invariant: instance Invariant STM
- Data.Functor.Invariant: instance Invariant Seq
- Data.Functor.Invariant: instance Invariant Tree
- Data.Functor.Invariant: instance Invariant U1
- Data.Functor.Invariant: instance Invariant V1
- Data.Functor.Invariant: instance Invariant ViewL
- Data.Functor.Invariant: instance Invariant ViewR
- Data.Functor.Invariant: instance Invariant ZipList
- Data.Functor.Invariant: instance Invariant []
- Data.Functor.Invariant: instance Invariant f => Invariant (Backwards f)
- Data.Functor.Invariant: instance Invariant f => Invariant (Lift f)
- Data.Functor.Invariant: instance Invariant f => Invariant (M1 i t f)
- Data.Functor.Invariant: instance Invariant f => Invariant (Rec1 f)
- Data.Functor.Invariant: instance Invariant f => Invariant (Reverse f)
- Data.Functor.Invariant: instance Invariant f => Invariant (Star f a)
- Data.Functor.Invariant: instance Invariant f => Invariant2 (Clown f)
- Data.Functor.Invariant: instance Invariant f => Invariant2 (Costar f)
- Data.Functor.Invariant: instance Invariant f => Invariant2 (Star f)
- Data.Functor.Invariant: instance Invariant g => Invariant (Joker g a)
- Data.Functor.Invariant: instance Invariant g => Invariant2 (Joker g)
- Data.Functor.Invariant: instance Invariant m => Invariant (ErrorT e m)
- Data.Functor.Invariant: instance Invariant m => Invariant (ExceptT e m)
- Data.Functor.Invariant: instance Invariant m => Invariant (IdentityT m)
- Data.Functor.Invariant: instance Invariant m => Invariant (ListT m)
- Data.Functor.Invariant: instance Invariant m => Invariant (MaybeT m)
- Data.Functor.Invariant: instance Invariant m => Invariant (RWST r w s m)
- Data.Functor.Invariant: instance Invariant m => Invariant (ReaderT r m)
- Data.Functor.Invariant: instance Invariant m => Invariant (StateT s m)
- Data.Functor.Invariant: instance Invariant m => Invariant (WriterT w m)
- Data.Functor.Invariant: instance Invariant2 ((,,) a)
- Data.Functor.Invariant: instance Invariant2 ((,,,) a b)
- Data.Functor.Invariant: instance Invariant2 ((,,,,) a b c)
- Data.Functor.Invariant: instance Invariant2 (,)
- Data.Functor.Invariant: instance Invariant2 (->)
- Data.Functor.Invariant: instance Invariant2 (Copastro p)
- Data.Functor.Invariant: instance Invariant2 (Environment p)
- Data.Functor.Invariant: instance Invariant2 (Forget r)
- Data.Functor.Invariant: instance Invariant2 (K1 i)
- Data.Functor.Invariant: instance Invariant2 (Pastro p)
- Data.Functor.Invariant: instance Invariant2 Arg
- Data.Functor.Invariant: instance Invariant2 Const
- Data.Functor.Invariant: instance Invariant2 Constant
- Data.Functor.Invariant: instance Invariant2 Either
- Data.Functor.Invariant: instance Invariant2 Op
- Data.Functor.Invariant: instance Invariant2 Tagged
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Closure p a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Codensity p a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Cotambara p a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Flip p a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Join p)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Procompose p q a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Rift p q a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant (Tambara p a)
- Data.Functor.Invariant: instance Invariant2 p => Invariant2 (Closure p)
- Data.Functor.Invariant: instance Invariant2 p => Invariant2 (Codensity p)
- Data.Functor.Invariant: instance Invariant2 p => Invariant2 (Cotambara p)
- Data.Functor.Invariant: instance Invariant2 p => Invariant2 (Flip p)
- Data.Functor.Invariant: instance Invariant2 p => Invariant2 (Tambara p)
- Data.Functor.Invariant: instance Invariant2 q => Invariant (Ran p q a)
- Data.Functor.Invariant: instance Ix i => Invariant (Array i)
- Data.Functor.Invariant: instance Monad m => Invariant (WrappedMonad m)
- Data.Functor.Invariant: instance Monad m => Monad (WrappedFunctor m)
- Data.Functor.Invariant: instance MonadPlus m => MonadPlus (WrappedFunctor m)
- Data.Functor.Invariant: instance Ord (f a) => Ord (WrappedContravariant f a)
- Data.Functor.Invariant: instance Ord (f a) => Ord (WrappedFunctor f a)
- Data.Functor.Invariant: instance Ord (p a b) => Ord (WrappedProfunctor p a b)
- Data.Functor.Invariant: instance Profunctor p => Invariant (WrappedProfunctor p a)
- Data.Functor.Invariant: instance Profunctor p => Invariant2 (WrappedProfunctor p)
- Data.Functor.Invariant: instance Profunctor p => Profunctor (WrappedProfunctor p)
- Data.Functor.Invariant: instance Read (f a) => Read (WrappedContravariant f a)
- Data.Functor.Invariant: instance Read (f a) => Read (WrappedFunctor f a)
- Data.Functor.Invariant: instance Read (p a b) => Read (WrappedProfunctor p a b)
- Data.Functor.Invariant: instance Show (f a) => Show (WrappedContravariant f a)
- Data.Functor.Invariant: instance Show (f a) => Show (WrappedFunctor f a)
- Data.Functor.Invariant: instance Show (p a b) => Show (WrappedProfunctor p a b)
- Data.Functor.Invariant: instance Strong p => Strong (WrappedProfunctor p)
- Data.Functor.Invariant: instance Traversable f => Traversable (WrappedFunctor f)
- Data.Functor.Invariant: unwrapBifunctor :: WrappedBifunctor a b -> p a b
- Data.Functor.Invariant: unwrapContravariant :: WrappedContravariant f a -> f a
- Data.Functor.Invariant: unwrapFunctor :: WrappedFunctor f a -> f a
- Data.Functor.Invariant: unwrapProfunctor :: WrappedProfunctor p a b -> p a b
+ Data.Functor.Invariant: [unwrapBifunctor] :: WrappedBifunctor a b -> p a b
+ Data.Functor.Invariant: [unwrapContravariant] :: WrappedContravariant f a -> f a
+ Data.Functor.Invariant: [unwrapFunctor] :: WrappedFunctor f a -> f a
+ Data.Functor.Invariant: [unwrapProfunctor] :: WrappedProfunctor p a b -> p a b
+ Data.Functor.Invariant: genericInvmap :: (Generic1 f, Invariant (Rep1 f)) => (a -> b) -> (b -> a) -> f a -> f b
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Compose.Compose f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Contravariant.Compose.Compose f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Contravariant.Compose.ComposeCF f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Contravariant.Compose.ComposeFC f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Product.Product f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Functor.Sum.Sum f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (f GHC.Generics.:.: g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant2 p) => Data.Functor.Invariant.Invariant (Data.Bifunctor.Tannen.Tannen f p a)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant2 p) => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Tannen.Tannen f p)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant2 p) => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Cayley.Cayley f p)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant l, Data.Functor.Invariant.Invariant r) => Data.Functor.Invariant.Invariant (l GHC.Generics.:*: r)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant l, Data.Functor.Invariant.Invariant r) => Data.Functor.Invariant.Invariant (l GHC.Generics.:+: r)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 f, Data.Functor.Invariant.Invariant2 g) => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Product.Product f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 p, Data.Functor.Invariant.Invariant f, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Biff.Biff p f g)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 p, Data.Functor.Invariant.Invariant g) => Data.Functor.Invariant.Invariant (Data.Bifunctor.Biff.Biff p f g a)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 p, Data.Functor.Invariant.Invariant2 q) => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Composition.Procompose p q)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 p, Data.Functor.Invariant.Invariant2 q) => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Composition.Rift p q)
+ Data.Functor.Invariant: instance (Data.Functor.Invariant.Invariant2 p, Data.Functor.Invariant.Invariant2 q) => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Ran.Ran p q)
+ Data.Functor.Invariant: instance Control.Arrow.Arrow a => Data.Functor.Invariant.Invariant (Control.Arrow.ArrowMonad a)
+ Data.Functor.Invariant: instance Control.Arrow.Arrow arr => Data.Functor.Invariant.Invariant (Control.Applicative.WrappedArrow arr a)
+ Data.Functor.Invariant: instance Control.Arrow.Arrow arr => Data.Functor.Invariant.Invariant (Data.Profunctor.WrappedArrow arr a)
+ Data.Functor.Invariant: instance Control.Arrow.Arrow arr => Data.Functor.Invariant.Invariant2 (Control.Applicative.WrappedArrow arr)
+ Data.Functor.Invariant: instance Control.Arrow.Arrow arr => Data.Functor.Invariant.Invariant2 (Data.Profunctor.WrappedArrow arr)
+ Data.Functor.Invariant: instance Data.Bifunctor.Bifunctor p => Data.Functor.Invariant.Invariant (Data.Bifunctor.Wrapped.WrappedBifunctor p a)
+ Data.Functor.Invariant: instance Data.Bifunctor.Bifunctor p => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Wrapped.WrappedBifunctor p)
+ Data.Functor.Invariant: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance Data.Functor.Contravariant.Contravariant f => Data.Functor.Contravariant.Contravariant (Data.Functor.Invariant.WrappedContravariant f)
+ Data.Functor.Invariant: instance Data.Functor.Contravariant.Contravariant f => Data.Functor.Invariant.Invariant (Data.Functor.Invariant.WrappedContravariant f)
+ Data.Functor.Invariant: instance Data.Functor.Contravariant.Divisible.Decidable f => Data.Functor.Contravariant.Divisible.Decidable (Data.Functor.Invariant.WrappedContravariant f)
+ Data.Functor.Invariant: instance Data.Functor.Contravariant.Divisible.Divisible f => Data.Functor.Contravariant.Divisible.Divisible (Data.Functor.Invariant.WrappedContravariant f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant ((,) a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant ((,,) a b)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant ((,,,) a b c)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant ((,,,,) a b c d)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant ((->) a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Control.Applicative.Const a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Control.Monad.ST.Lazy.Imp.ST s)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Control.Monad.Trans.Cont.ContT r m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Bifunctor.Clown.Clown f a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Either.Either a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Functor.Constant.Constant a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Functor.Contravariant.Op a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.HashMap.Base.HashMap k)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Map.Base.Map k)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Profunctor.Costar f a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Profunctor.Forget r a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (Data.Semigroup.Arg a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (GHC.Generics.K1 i c)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant (GHC.ST.ST s)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Control.Applicative.ZipList
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Control.Exception.Handler
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Functor.Contravariant.Comparison
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Functor.Contravariant.Equivalence
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Functor.Contravariant.Predicate
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Functor.Identity.Identity
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.IntMap.Base.IntMap
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.List.NonEmpty.NonEmpty
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Monoid.Dual
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Monoid.Endo
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Monoid.First
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Monoid.Last
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Proxy.Proxy
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Semigroup.First
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Semigroup.Last
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Semigroup.Max
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Semigroup.Min
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Semigroup.Option
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Sequence.Seq
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Sequence.ViewL
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Sequence.ViewR
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Data.Tree.Tree
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Base.Maybe
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Conc.Sync.STM
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Generics.Par1
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Generics.U1
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Generics.V1
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Types.IO
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant System.Console.GetOpt.ArgDescr
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant System.Console.GetOpt.ArgOrder
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant System.Console.GetOpt.OptDescr
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Text.ParserCombinators.ReadP.ReadP
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant Text.ParserCombinators.ReadPrec.ReadPrec
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant []
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (Control.Applicative.Backwards.Backwards f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (Control.Applicative.Lift.Lift f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (Data.Functor.Reverse.Reverse f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (Data.Monoid.Alt f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (Data.Profunctor.Star f a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (GHC.Generics.M1 i t f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant (GHC.Generics.Rec1 f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Clown.Clown f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Costar f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant f => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Star f)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant g => Data.Functor.Invariant.Invariant (Data.Bifunctor.Joker.Joker g a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant g => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Joker.Joker g)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Error.ErrorT e m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Except.ExceptT e m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Identity.IdentityT m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.List.ListT m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Maybe.MaybeT m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Reader.ReaderT r m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.State.Lazy.StateT s m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.State.Strict.StateT s m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant m => Data.Functor.Invariant.Invariant (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 ((,,) a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 ((,,,) a b)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 ((,,,,) a b c)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (,)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (->)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (Data.Profunctor.Closed.Environment p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (Data.Profunctor.Forget r)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (Data.Profunctor.Tambara.Copastro p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (Data.Profunctor.Tambara.Pastro p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 (GHC.Generics.K1 i)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Control.Applicative.Const
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Data.Either.Either
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Data.Functor.Constant.Constant
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Data.Functor.Contravariant.Op
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Data.Semigroup.Arg
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 Data.Tagged.Tagged
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Bifunctor.Flip.Flip p a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Bifunctor.Join.Join p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Closed.Closure p a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Codensity.Codensity p a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Composition.Procompose p q a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Composition.Rift p q a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Tambara.Cotambara p a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant (Data.Profunctor.Tambara.Tambara p a)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant2 (Data.Bifunctor.Flip.Flip p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Closed.Closure p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Codensity.Codensity p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Tambara.Cotambara p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 p => Data.Functor.Invariant.Invariant2 (Data.Profunctor.Tambara.Tambara p)
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant2 q => Data.Functor.Invariant.Invariant (Data.Profunctor.Ran.Ran p q a)
+ Data.Functor.Invariant: instance Data.Profunctor.Choice p => Data.Profunctor.Choice (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Closed.Closed p => Data.Profunctor.Closed.Closed (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Cochoice p => Data.Profunctor.Cochoice (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Costrong p => Data.Profunctor.Costrong (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Strong p => Data.Profunctor.Strong (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Unsafe.Profunctor p => Data.Functor.Invariant.Invariant (Data.Functor.Invariant.WrappedProfunctor p a)
+ Data.Functor.Invariant: instance Data.Profunctor.Unsafe.Profunctor p => Data.Functor.Invariant.Invariant2 (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Profunctor.Unsafe.Profunctor p => Data.Profunctor.Unsafe.Profunctor (Data.Functor.Invariant.WrappedProfunctor p)
+ Data.Functor.Invariant: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance GHC.Arr.Ix i => Data.Functor.Invariant.Invariant (GHC.Arr.Array i)
+ Data.Functor.Invariant: instance GHC.Base.Alternative f => GHC.Base.Alternative (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance GHC.Base.Applicative f => GHC.Base.Applicative (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance GHC.Base.Functor f => Data.Functor.Invariant.Invariant (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Functor.Invariant.WrappedFunctor f)
+ Data.Functor.Invariant: instance GHC.Base.Monad m => Data.Functor.Invariant.Invariant (Control.Applicative.WrappedMonad m)
+ Data.Functor.Invariant: instance GHC.Base.Monad m => GHC.Base.Monad (Data.Functor.Invariant.WrappedFunctor m)
+ Data.Functor.Invariant: instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Data.Functor.Invariant.WrappedFunctor m)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Classes.Eq (f a) => GHC.Classes.Eq (Data.Functor.Invariant.WrappedContravariant f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Classes.Eq (f a) => GHC.Classes.Eq (Data.Functor.Invariant.WrappedFunctor f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Classes.Ord (f a) => GHC.Classes.Ord (Data.Functor.Invariant.WrappedContravariant f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Classes.Ord (f a) => GHC.Classes.Ord (Data.Functor.Invariant.WrappedFunctor f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Read.Read (f a) => GHC.Read.Read (Data.Functor.Invariant.WrappedContravariant f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Read.Read (f a) => GHC.Read.Read (Data.Functor.Invariant.WrappedFunctor f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Show.Show (f a) => GHC.Show.Show (Data.Functor.Invariant.WrappedContravariant f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (f :: k -> *) (a :: k). GHC.Show.Show (f a) => GHC.Show.Show (Data.Functor.Invariant.WrappedFunctor f a)
+ Data.Functor.Invariant: instance forall (k :: BOX) (k1 :: BOX) (p :: k -> k1 -> *) (a :: k) (b :: k1). GHC.Classes.Eq (p a b) => GHC.Classes.Eq (Data.Functor.Invariant.WrappedProfunctor p a b)
+ Data.Functor.Invariant: instance forall (k :: BOX) (k1 :: BOX) (p :: k -> k1 -> *) (a :: k) (b :: k1). GHC.Classes.Ord (p a b) => GHC.Classes.Ord (Data.Functor.Invariant.WrappedProfunctor p a b)
+ Data.Functor.Invariant: instance forall (k :: BOX) (k1 :: BOX) (p :: k -> k1 -> *) (a :: k) (b :: k1). GHC.Read.Read (p a b) => GHC.Read.Read (Data.Functor.Invariant.WrappedProfunctor p a b)
+ Data.Functor.Invariant: instance forall (k :: BOX) (k1 :: BOX) (p :: k -> k1 -> *) (a :: k) (b :: k1). GHC.Show.Show (p a b) => GHC.Show.Show (Data.Functor.Invariant.WrappedProfunctor p a b)
+ Data.Functor.Invariant: instance forall (k :: BOX) (s :: k). Data.Functor.Invariant.Invariant (Data.Tagged.Tagged s)
- Data.Functor.Invariant: class Invariant f
+ Data.Functor.Invariant: class Invariant f where invmap = genericInvmap
Files
- CHANGELOG.md +5/−0
- invariant.cabal +2/−2
- src/Data/Functor/Invariant.hs +32/−20
- src/Data/Functor/Invariant/TH/Internal.hs +2/−3
CHANGELOG.md view
@@ -1,3 +1,8 @@+# 0.2.2+* Add `genericInvmap` function (and make it the default implementation of+ `invmap` for `Invariant` instances) on GHC 7.2 or later+* Make `Tagged` instance poly-kinded+ # 0.2.1 * Add `Foldable` and `Traversable` instances for `WrappedFunctor` * Fixed build on GHC HEAD
invariant.cabal view
@@ -1,5 +1,5 @@ name: invariant-version: 0.2.1+version: 0.2.2 synopsis: Haskell 98 invariant functors description: Haskell 98 invariant functors category: Control, Data@@ -9,7 +9,7 @@ bug-reports: https://github.com/nfrisby/invariant-functors/issues author: Nicolas Frisby <nicolas.frisby@gmail.com> maintainer: Nicolas Frisby <nicolas.frisby@gmail.com>,- Ryan Scott <ryan.gl.scott@ku.edu>+ Ryan Scott <ryan.gl.scott@gmail.com> build-type: Simple cabal-version: >= 1.9.2 extra-source-files: CHANGELOG.md, README.md
src/Data/Functor/Invariant.hs view
@@ -3,6 +3,15 @@ #define GHC_GENERICS_OK __GLASGOW_HASKELL__ >= 702 +#if GHC_GENERICS_OK+{-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE FlexibleContexts #-}+#endif++#if __GLASGOW_HASKELL__ >= 706+{-# LANGUAGE PolyKinds #-}+#endif+ {-| Module: Data.Functor.Invariant Copyright: (C) 2012-2015 Nicolas Frisby, (C) 2015 Ryan Scott@@ -21,13 +30,14 @@ ( -- * @Invariant@ Invariant(..) , invmapFunctor- , WrappedFunctor(..)- , invmapContravariant- , WrappedContravariant(..) #if GHC_GENERICS_OK -- ** @GHC.Generics@ -- $ghcgenerics+ , genericInvmap #endif+ , WrappedFunctor(..)+ , invmapContravariant+ , WrappedContravariant(..) -- * @Invariant2@ , Invariant2(..) , invmap2Bifunctor@@ -146,6 +156,10 @@ -- > invmap f2 f2' . invmap f1 f1' = invmap (f2 . f1) (f1' . f2') class Invariant f where invmap :: (a -> b) -> (b -> a) -> f a -> f b+#if GHC_GENERICS_OK+ default invmap :: (Generic1 f, Invariant (Rep1 f)) => (a -> b) -> (b -> a) -> f a -> f b+ invmap = genericInvmap+#endif -- | Every 'Functor' is also an 'Invariant' functor. invmapFunctor :: Functor f => (a -> b) -> (b -> a) -> f a -> f b@@ -739,30 +753,28 @@ instance (Invariant f, Invariant g) => Invariant ((:.:) f g) where invmap f g (Comp1 fgp) = Comp1 $ invmap (invmap f g) (invmap g f) fgp - {- $ghcgenerics--Note: The restriction to Haskell98 prevents the full adoption of-"GHC.Generics", but we are permitted to at least provide @Invariant@-instances for the representation data types. Thus, while the \"ideal\"+With GHC 7.2 or later, 'Invariant' instances can be defined easily using GHC+generics like so: @- instance Invariant f => 'Invariant' (T f)-@+{-# LANGUAGE DeriveGeneric, FlexibleContexts #-} -doesn't work --- because Haskell98 precludes our use of-@-XDefaultSignatures@ in the class definition ---, the user only needs-to do slightly more work:+import Data.Functor.Invariant+import GHC.Generics -@- import GHC.Generics (from1,to1)+data T f a = T (f a) deriving Generic1 - instance Invariant f => 'Invariant' (T f) where- invmap f g = 'to1' . 'invmap' f g . 'from1'+instance Invariant f => 'Invariant' (T f) @ -Note also that that instance is in fact Haskell98. Unfortunately, one-would require @-XFlexibleContexts@ in order to factor that right-hand-side out as reusable declaration polymorphic in the data type.+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. -}++-- | A generic implementation of 'invmap'.+genericInvmap :: (Generic1 f, Invariant (Rep1 f)) => (a -> b) -> (b -> a) -> f a -> f b+genericInvmap f g = to1 . invmap f g . from1 #endif
src/Data/Functor/Invariant/TH/Internal.hs view
@@ -13,9 +13,8 @@ import Data.Function (on) import Data.List-import qualified Data.Map as Map (fromList, lookup)+import qualified Data.Map as Map (fromList, findWithDefault) import Data.Map (Map)-import Data.Maybe import qualified Data.Set as Set import Data.Set (Set) @@ -69,7 +68,7 @@ subst :: Subst -> Type -> Type subst subs (ForallT v c t) = ForallT v c $ subst subs t-subst subs t@(VarT n) = fromMaybe t $ Map.lookup n subs+subst subs t@(VarT n) = Map.findWithDefault t n subs subst subs (AppT t1 t2) = AppT (subst subs t1) (subst subs t2) subst subs (SigT t k) = SigT (subst subs t) k subst _ t = t