
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
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