
Hello Vyacheslav, Wednesday, December 27, 2006, 5:29:37 PM, you wrote:
If I enable incoherent instances GHC always picks the general case which seems like the wrong thing to do. What I want it to do is delay comitting to an instance until it's processing a specific invocation of a polymorphic function. All the information is available at compile time but I found no way to do this.
are you seen http://haskell.org/haskellwiki/OOP_vs_type_classes ? it contains example where compiler choose general instance just because function calling polymorhic code don't get full dictionary of type. smth like this: class F a where f :: a -> Int instance (Num a) => F a ... instance F Int ... g :: (Num a) => a -> a g x = f x main = print (g (1::Int)) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com