Right-to-left composition of functors. The composition of applicative functors is always applicative, but the composition of monads is not always a monad.
Examples
fmap (subtract 1) (Compose (Just [1, 2, 3]))Compose (Just [0,1,2])
Compose (Just [1, 2, 3]) <> Compose NothingCompose (Just [1,2,3])
Compose (Just [(++ "World"), (++ "Haskell")]) <*> Compose (Just ["Hello, "])Compose (Just ["Hello, World","Hello, Haskell"])
Constructors
Composeinfixr 9getCompose :: f (g a)
Instances74Generic1, TestEquality, Composition, FoldableWithIndex, FunctorWithIndex, TraversableWithIndex, …
Functor f => Generic1 (Compose f g)Defined in base-4.20.2.0 · Data.Functor.ComposeTestEquality f => TestEquality (Compose f g)Defined in base-4.20.2.0 · Data.Functor.ComposeThe deduction (via generativity) that if
g x :~: g ythenx :~: y.Unbox (f (g a)) => Vector Vector (Compose f g a)Defined in vector-0.13.2.0 · Data.Vector.Unboxed.BaseUnbox (f (g a)) => MVector MVector (Compose f g a)Defined in vector-0.13.2.0 · Data.Vector.Unboxed.BaseComposition ComposeDefined in comonad-5.0.9 · Data.Functor.Composition(FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (i, j) (Compose f g)Defined in indexed-traversable-0.1.4 · WithIndex(FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (i, j) (Compose f g)Defined in indexed-traversable-0.1.4 · WithIndex(TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (i, j) (Compose f g)Defined in indexed-traversable-0.1.4 · WithIndex(Functor f, Functor g) => Functor (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Applicative f, Applicative g) => Applicative (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Foldable f, Foldable g) => Foldable (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Traversable f, Traversable g) => Traversable (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Alternative f, Applicative g) => Alternative (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Foldable1 f, Foldable1 g) => Foldable1 (Compose f g)Defined in base-4.20.2.0 · Data.Foldable1(Eq1 f, Eq1 g) => Eq1 (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Ord1 f, Ord1 g) => Ord1 (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Read1 f, Read1 g) => Read1 (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Show1 f, Show1 g) => Show1 (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Functor f, Contravariant g) => Contravariant (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Contravariant(NFData1 f, NFData1 g) => NFData1 (Compose f g)Defined in deepseq-1.5.0.0 · Control.DeepSeq(Hashable1 f, Hashable1 g) => Hashable1 (Compose f g)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Distributive f, Distributive g) => Distributive (Compose f g)Defined in distributive-0.6.2.1 · Data.Distributive(Applicative f, Decidable g) => Decidable (Compose f g)Defined in contravariant-1.5.5 · Data.Functor.Contravariant.Divisible(Applicative f, Divisible g) => Divisible (Compose f g)Defined in contravariant-1.5.5 · Data.Functor.Contravariant.Divisible(Alt f, Functor g) => Alt (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Alt(Apply f, Apply g) => Apply (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Bind.Class(Apply f, Applicative f, Conclude g) => Conclude (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Conclude(Apply f, Decide g) => Decide (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide(Apply f, Divise g) => Divise (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise(Plus f, Functor g) => Plus (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Plus(Traversable1 f, Traversable1 g) => Traversable1 (Compose f g)Defined in semigroupoids-6.0.1 · Data.Semigroup.Traversable.Class(Representable f, Representable g) => Representable (Compose f g)Defined in adjunctions-4.4.3 · Data.Functor.Rep(Invariant f, Invariant g) => Invariant (Compose f g)Defined in invariant-0.6.4 · Data.Functor.Invariantfrom Data.Functor.Compose
(Applicative f, Selective g) => Selective (Compose f g)Defined in selective-0.7.0.1 · Control.Selective(FoldableWithKey f, FoldableWithKey m) => FoldableWithKey (Compose f m)Defined in keys-3.12.3 · Data.Key(FoldableWithKey1 f, FoldableWithKey1 m) => FoldableWithKey1 (Compose f m)Defined in keys-3.12.3 · Data.Key(Indexable f, Indexable g) => Indexable (Compose f g)Defined in keys-3.12.3 · Data.Key(Keyed f, Keyed g) => Keyed (Compose f g)Defined in keys-3.12.3 · Data.Key(Lookup f, Lookup g) => Lookup (Compose f g)Defined in keys-3.12.3 · Data.Key(TraversableWithKey f, TraversableWithKey m) => TraversableWithKey (Compose f m)Defined in keys-3.12.3 · Data.Key(TraversableWithKey1 f, TraversableWithKey1 m) => TraversableWithKey1 (Compose f m)Defined in keys-3.12.3 · Data.Key(Zip f, Zip g) => Zip (Compose f g)Defined in keys-3.12.3 · Data.Key(ZipWithKey f, ZipWithKey g) => ZipWithKey (Compose f g)Defined in keys-3.12.3 · Data.Key(Copointed p, Copointed q) => Copointed (Compose p q)Defined in pointed-5.0.4 · Data.Copointed(Pointed p, Pointed q) => Pointed (Compose p q)Defined in pointed-5.0.4 · Data.Pointed(Adjunction f g, Adjunction f' g') => Adjunction (Compose f' f) (Compose g g')Defined in adjunctions-4.4.3 · Data.Functor.AdjunctionBounded (f (g a)) => Bounded (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeEnum (f (g a)) => Enum (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeEq (f (g a)) => Eq (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeFloating (f (g a)) => Floating (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeFractional (f (g a)) => Fractional (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeIntegral (f (g a)) => Integral (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.Compose(Typeable a, Typeable f, Typeable g, Typeable k1, Typeable k2, Data (f (g a))) => Data (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeNum (f (g a)) => Num (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeOrd (f (g a)) => Ord (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeRead (f (g a)) => Read (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeReal (f (g a)) => Real (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeRealFloat (f (g a)) => RealFloat (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeRealFrac (f (g a)) => RealFrac (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeShow (f (g a)) => Show (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeGeneric (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeSemigroup (f (g a)) => Semigroup (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeMonoid (f (g a)) => Monoid (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.ComposeNFData (f (g a)) => NFData (Compose f g a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNote: in
deepseq-1.5.0.0this instance's superclasses were changed.(Hashable1 f, Hashable1 g, Hashable a) => Hashable (Compose f g a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassIn general,
hash (Compose x) ≠ hash x. However,hashWithSaltsatisfies its variant of this equivalence.Unbox (f (g a)) => Unbox (Compose f g a)Defined in vector-0.13.2.0 · Data.Vector.Unboxed.Base(Cosieve p f, Cosieve q g) => Cosieve (Procompose p q) (Compose f g)Defined in profunctors-5.6.3 · Data.Profunctor.Composition(Sieve p f, Sieve q g) => Sieve (Procompose p q) (Compose g f)Defined in profunctors-5.6.3 · Data.Profunctor.Compositiontype Rep (Compose f g a) = D1 ('MetaDataDefined in base-4.20.2.0 · Data.Functor.Compose"Compose"
"Data.Functor.Compose"
"base"
'True) (C1 ('MetaCons"Compose"
'PrefixI 'True) (S1 ('MetaSel ('Just"getCompose"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f (g a)))))type Rep1 (Compose f g) = D1 ('MetaDataDefined in base-4.20.2.0 · Data.Functor.Compose"Compose"
"Data.Functor.Compose"
"base"
'True) (C1 ('MetaCons"Compose"
'PrefixI 'True) (S1 ('MetaSel ('Just"getCompose"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (f :.: Rec1 g)))data MVector s (Compose f g a)MV_Compose (MVector s (f (g a)))
data Vector (Compose f g a)Defined in vector-0.13.2.0 · Data.Vector.Unboxed.Basetype Rep (Compose f g) = (Rep f, Rep g)Defined in adjunctions-4.4.3 · Data.Functor.Reptype Key (Compose f g) = (Key f, Key g)Defined in keys-3.12.3 · Data.Key