Why is (=<<) id = join in Haskell?
haskell
Solution
`m a' -> m a'` is also a kind of `a -> a`, so we can have
id :: m a' -> m a' -- a = m a'
(=<<) :: (m a' -> m a') -> m (m a') -> m a' -- a = m a', b = a'
(=<<) id :: m (m a') -> m a'
Problem
``` (=<<) :: (a -> m b) -> m a -> m b id :: a -> a join :: m (m a) -> m a ``` So shouldn't, ``` (=<<) id ``` give an error because, ``` id :: a -> a ``` and not, ``` id :: a -> m a ``` Doesn't (=<<) expect, ``` (something -> m anything) ``` as its first argument?