TL DR . We use a monad instance in ((->) rbetween.
We have to look at (.) (>>=). So let's first repeat the types:
(>>=) :: Monad m => m a -> ((a -> m b) -> m b)
(.) :: (y -> z ) -> (x -> y) -> (x -> z)
Therefore, we have
(.) (>>=) :: Monad m => (x -> m a) -> (x -> ((a -> m b) -> m b))
-- or, with less parentheses
(.) (>>=) :: Monad m => (x -> m a) -> x -> (a -> m b) -> m b
Now we connect one more (>>=):
(.) (>>=) :: Monad m => (x -> m a ) -> x -> (a -> m b) -> m b
(>>=) :: Monad k => k i -> ((i -> k j) -> k j)
. Monad m => m a ((i -> k j) -> k j) . ? , , monad
Monad k => (->) (i -> k j)
, ,
instance Monad ((->) r)
r.
m ((->) (i -> k j), m (i -> k j) ->:
(.) (>>=) :: (x -> (i -> k j) -> a) -> x -> (a -> (i -> k j) -> b) -> (i -> k j) -> b
(>>=) :: Monad k => k i -> ((i -> k j) -> k j)
x ~ k i, a ~ k j
(.) (>>=) :: (x -> (i -> k j) -> a) -> x -> (a -> (i -> k j) -> b) -> (i -> k j) -> b
(>>=) :: Monad k => k i -> ((i -> k j) -> k j)
(>>=) . (>>=) :: Monad k => k i -> (k j -> (i -> k j) -> b) -> (i -> k j) -> b
, k m, i a j b2,
(>>=) . (>>=) :: Monad m => m a -> (m b2 -> (a -> m b2) -> b) -> (a -> m b2) -> b