The following module

  module Bug where

  class C a b c | a b -> c where
    m :: a -> b -> c

  instance C Integer Integer Integer

  newtype T a = T a

  instance C a b c => C (T a) (T b) (T c) 

  i :: T Integer
  i = undefined

  x = m (m i i) i

generates the following error:

  $ hugs -98 Bug.hs 
  __   __ __  __  ____   ___      _________________________________________
  ||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
  ||___|| ||__|| ||__||  __||     Copyright (c) 1994-2001
  ||---||         ___||           World Wide Web: http://haskell.org/hugs
  ||   ||                         Report bugs to: [EMAIL PROTECTED]
  ||   || Version: December 2001  _________________________________________

  Hugs mode: Restart with command line option +98 for Haskell 98 mode

  Reading file "/usr/share/hugs/lib/Prelude.hs":
  Reading file "Bug.hs":
  Type checking      
  ERROR "Bug.hs":16 - Unresolved top-level overloading
  *** Binding             : x
  *** Outstanding context : C Integer Integer b

If the definition of x is changed to

  x _ = m (m i i) i

the module loads and x gets the type

  Bug> :t x
  x :: a -> T Integer

So it looks like a monomorphism check is carried out too early in the
first case.

/M
_______________________________________________
Hugs-Bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/hugs-bugs

Reply via email to