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)
Instances34Generic1, TestEquality, Functor, Applicative, Foldable, Traversable, …
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.(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.DeepSeqBounded (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.type 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)))