Apologies for the spam, I had some difficulty getting my email address set up right on the list and wanted to make sure this finally got through (or perhaps there are like 5 copies on the list now... sorry.)

thanks

---------- Forwarded message ----------

Ok, now I will try asking the right question (previous try wasn't actually an example of the problem I'm having)

Here's the code:


data Test = Test

data Test2 = Test2

class MyClass a where
   getChild :: MyClass b => a -> b

instance MyClass Test where
   getChild a = Test2

instance MyClass Test2 where
   getChild a = Test

On HUGS I get:

Error occurred
ERROR line 9 - Inferred type is not general enough
*** Expression    : getChild
*** Expected type : (MyClass Test, MyClass a) => Test -> a
*** Inferred type : (MyClass Test, MyClass Test2) => Test -> Test2

So, what's the problem with always returning a particular instance of MyClass? I just want to constrain it to be an instance of MyClass, nothing more.

thanks,

David


2009/12/18 David Gordon <david.robert.gordon@googlemail.com>

>
> Hi Folks,
> Total newbie here. I don't know if I am having a syntactic problem or a conceptual problem.
> This code:
> data Test = Test
> data Test2 = Test2
> class MyClass a where
>     getChild :: (MyClass b) => a -> b
> instance MyClass Test where
>     getChild = Test2
> instance MyClass Test2 where
>     getChild = Test
> results in:
> [1 of 1] Compiling Main             ( test.hs, interpreted )
> test.hs:10:15:
>     Couldn't match expected type `Test -> b'
>            against inferred type `Test2'
>     In the expression: Test2
>     In the definition of `getChild': getChild = Test2
>     In the instance declaration for `MyClass Test'
> test.hs:13:15:
>     Couldn't match expected type `Test2 -> b'
>            against inferred type `Test'
>     In the expression: Test
>     In the definition of `getChild': getChild = Test
>     In the instance declaration for `MyClass Test2'
> Failed, modules loaded: none.
> Is this a reasonable thing to try and do in Haskell? If not, I have a lot more questions... ;)
> many thanks,
> David
>