Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is (=<<) id = join in Haskell?

Tags:

haskell

(=<<) :: (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?

like image 756
louzer Avatar asked Oct 25 '25 14:10

louzer


1 Answers

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'
like image 95
kennytm Avatar answered Oct 28 '25 03:10

kennytm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!