Confused about default

Ian Lynagh
Fri, 14 Dec 2001 21:28:30 +0000

Hi all

I am rather confused about default.

In section 4.3.4 the report says
    "each ti must be a monotype for which Num ti holds"
but according to grep this is the only place "monotype" appears in the

If I have the module

    module TT (Foo(..)) where

    default (Foo, [Foo], Foo -> Int)

    data Foo = Foo deriving (Eq, Show)

    instance Num Foo where {}
    instance (Eq a, Show a) => Num [a] where {}
    instance Eq (a -> b) where {}
    instance Show (a -> b) where {}
    instance Num (a -> b) where {}

then hugs accepts it and
    TT> 5

    Program error: Undefined member: fromInteger

ghc accepts it and
    TT> 5

nhc tells me

    Error when renaming::
    Illegal type in default at 4:17

If I remove all the list and function stuff then hi says
    TT> 5

If I have a
    main = putStrLn $ show 5

then nhc gives me
    TT> main
    No default definition for class method fromInteger

and ghci gives me
    Main> main
    *** Exception: TT.lhs:8: No instance nor default method for class
    operation PrelNum.fromInteger

It seems to me that hugs is in the right with it's handling of 5, but I
am not sure who is wrong with default ([Foo]) or (Foo -> Int).

Finally, the context free grammar doesn't currently enforce the
restriction that only one default declaration be given. Fixing it would
make rather a mess, though.