(>>=) :: m a -> (a -> m b) -> m b
(<$>) :: (a -> b) -> f a -> f bVery hard to understand that both functions are similar in their essence.
(=<<) :: (a -> m b) -> m a -> m b
(<$>) :: (a -> b) -> f a -> f b
($) :: (a -> b) -> a -> bWe naturally find that the only difference between thoses functions is the extra
effect. Removing the effects would obviously lead to (=<<) = (<$>) = ($)
This property mean that I could replace all (=<<) and (<$>) with ($) if I remove the extra effects from the involved functions, with my code still typechecking.
(<=<) :: (b -> m c) -> (a -> m b) -> a -> m c
. :: (b -> c) -> (a -> b) -> a -> cThe same pattern arise with kleisli composition. The only difference being again the extra effect.