[Haskell-beginners] Is this MR? Type restriction confusion
Brandon S. Allbery KF8NH
allbery at ece.cmu.edu
Thu Dec 17 18:35:32 EST 2009
On Dec 17, 2009, at 17:56 , Mike Erickson wrote:
> f1a x = map (*x) -- has type (Num a) => a -> [a] -> [a]
>
> f1b = \x -> map (*x) -- has type Integer -> [Integer] -> [Integer]
>
> Can someone help me understand why the latter has a more restrictive
> type?
That is indeed the monomorphism restriction.
In very short: if a top level form (like your f1, f1a, f1b) takes no
arguments and does not have an explicit type, its type is restricted
according to defaulting; if no suitable default exists, it is
rejected. In this case, defaulting gave it the type Integer because
Integer is the first type in the defaults list that allows the
declaration to typecheck. (The default "defaults list" is Integer,
Double, and in recent GHC () (the null/unit type).
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university KF8NH
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url : http://www.haskell.org/pipermail/beginners/attachments/20091217/78bdbd6b/PGP.bin
More information about the Beginners
mailing list