Forgive me if the question sounds silly, I'm still a beginner learning Haskell.
Given the bind operator function signature:
(>>=) :: m a -> (a -> m b) -> m b
My question is, how does the "a" value get extracted from "m a" so that the function (a -> m b) can fire? Does haskell abstract this internally?