Goal, find: ◎ :: (b -> F c) -> (a -> F b) -> (a -> F c)
f :: a -> F b
, g :: b -> F c
, f x :: F b
:
fmap :: (t -> u) -> (F t -> F u)
!(fmap g) :: F b -> F (F c)
; (t=b
, u=F c
)(fmap g) (f x) :: F (F c)
it almost WORKS!join :: F (F c) -> F c
(g ◎ f) x = join ((fmap g) (f x))
☺<=<
(in Control.Monad
).