Ah, thanks for the explanation. I hadn't heard of ExtendedDefaultRules before.

Peter


On 8 June 2013 14:35, Brandon Allbery <allbery.b@gmail.com> wrote:
On Sat, Jun 8, 2013 at 9:02 AM, Peter Hall <peter.hall@memorphic.com> wrote:
This is confusing me, and I'm wondering if it's a compiler bug. I have this:

   foo = (++) `on` show

I'm expecting the type to be:

    foo :: Show a => a -> a -> String

But GHCI is inferring:

    foo :: () -> () -> String

No bug; it's the monomorphism restriction combining with extended defaulting to infer a monomorphic type. If you want to keep the monomorphism restriction and throw a type error, disable ExtendedDefaultRules.

--
brandon s allbery kf8nh                               sine nomine associates
allbery.b@gmail.com                                  ballbery@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net