I'm not actually sure whether this is a bug, but if it isn't, could someone please enlighten me about what is going on?-)
[the following is a simplified version of a problem with instances generated by Drift, for Strafunksi, where T would be the Drift target, C would be Term, and expl(ode) would return TermRep] ------------ {-# OPTIONS -fglasgow-exts -fallow-overlapping-instances -fallow-undecidable-instances #-} module Main where data T a = D [a] class C t where expl :: t -> String expl x = "default" instance C String where expl s = "String" instance C a => C [a] where expl l = "[a]" instance (C a {- ,C [a] -} ) => C (T a) where expl (D xs) = expl xs main = putStrLn $ expl "hi" ------------ As is, both ghc and hugs reject the program, whereas both accept it with the extra constraint in the C (T a) instance.. Now, I think I can see how the right-hand-side expl could come either from the C String or from the C [a] instance - hence ghc's message: $ ghc --make Tst.hs c:\ghc\ghc-5.04\bin\ghc.exe: chasing modules from: Tst.hs Compiling Main ( Tst.hs, ./Tst.o ) Tst.hs:15: Could not unambiguously deduce (C [a]) from the context (C (T a), C a) The choice of (overlapping) instance declaration depends on the instantiation of `a' Probable fix: Add (C [a]) to the class or instance method `expl' Or add an instance declaration for (C [a]) arising from use of `expl' at Tst.hs:15 In the definition of `expl': expl xs What I don't understand, however, is why adding that extra constraint helps in any way? Shouldn't the addition of new things in the context only make more options available? Why does it make some of the existing, amgibuous options go away? Confused, Claus PS. Perhaps related, but why does Hugs seem to ignore the C a constraint in the context of the original version? $ hugs -98 Tst.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 "c:\Program Files\Hugs98\\lib\Prelude.hs": Reading file "Tst.hs": Type checking ERROR "Tst.hs":15 - Cannot justify constraints in instance member binding *** Expression : expl *** Type : C (T a) => T a -> String *** Given context : C (T a) *** Constraints : C [a] Prelude> _______________________________________________ Glasgow-haskell-bugs mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs