We can have two types f, g :: * -> *
such that they're not monads, but their composition is. For example for an arbitrary fixed s
:
f a := s -> a
g a := (s, a)
g a
isn't a monad (unless we restrict s
to a monoid), but f (g a)
is the state monad s -> (s, a)
. (Unlike functors and applicative functors, even if both f
and g
were monads, their composition might not be.)
Is there a similar example for functors or applicative functors? That is that the composition of f
and g
is a a functor (or an applicative functor), even though
f
and g
isn't an (applicative) functor and the other is, orThis is not a (covariant) functor
f x = x -> r
but f . f
is the "continuation" functor (also a monad):
f (f x) = (x -> r) -> r
This is probably not the best example because f
is a contravariant functor.
Let g :: *->*
. Then Const A . g
is a functor for any A
, in fact isomorphic to Const A
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With