[Haskell-beginners] Overlapping instances

Nathan Hüsken nathan.huesken at posteo.de
Tue Dec 25 16:52:00 CET 2012


Hi,

I have a test file:

module  Main where

class A a where
  doSomething :: a -> IO ()
class B b where
  doMore :: b -> IO ()

instance B b => A b where
  doSomething = doMore

instance A String where
  doSomething = putStrLn

main = doSomething "Hello, World!

So there is a class A, and a class B. If something is part of B it is
automatically part of A (so A is kind of a superclass to B). But String
is just part of A.
I try to compile it with:

ghc Test.hs -XFlexibleInstances -XUndecidableInstances

I get:

Test.hs:14:8:
    Overlapping instances for A [Char]
      arising from a use of `doSomething'
    Matching instances:
      instance B b => A b -- Defined at Test.hs:8:10
      instance A String -- Defined at Test.hs:11:10
    In the expression: doSomething "Hello, World!"
    In an equation for `main': main = doSomething "Hello, World!"

Why are the instances overlapping? String is not part of B???
How can I do this?
Thanks!
Nathan



More information about the Beginners mailing list