On Sun, Dec 30, 2012 at 1:27 PM, Brandon Allbery <allbery.b@gmail.com> wrote:
[T]he "Monad m =>" in the signature really means "hey, compiler, pass me the appropriate implementation of Monad so I can figure out what I'm doing with this type m". It's not a built in table, it's a hidden parameter.
Well, "hidden" - it *is* right there in the type signature still, it just doesn't *look* like an argument.
It also might be optimized away in static cases (certainly, it *could* happen, whether does or is even worthwhile is another question).