[Haskell-beginners] binding vs. parameter passing

James Jones jejones3141 at gmail.com
Tue Jul 23 02:29:30 UTC 2019

One problem in *Programming Haskell from First Principles* confuses me. (So

It's one where you start with the declaration and binding

i :: Num a => a
i = 1

(which of course works because Num a => a is the type of 1) and then change
the declaration to

i :: a

and first try to predict and then see what happens. It fails, with ghci
suggesting that you put the Num a => back. That seemed reasonable at first,
but then I considered this:

   - id has type a -> a, and if you try to evaluate id 1 it works without
   - In all the work I've done on compilers, parameter passing has
   effectively been assignment of actual parameters to the corresponding
   formal parameters. In Haskell, that might mean passing along the
   appropriate thunk, but the principle is the same, isn't it?

So, if I can't bind 1 to i which is declared to have type a, why can I
successfully pass 1 to id?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20190722/52efee62/attachment.html>

More information about the Beginners mailing list