
Hi, I have a simple test case containing a typeclass Foo with one type variable a. The goal is to write once and for all a function symbolToInfixLevel function that combines two other functions defined in the typeclass: ----------------------- class Foo a where symbolToConstructor :: String -> ( a -> a -> a ) infixLevel :: a -> Int symbolToInfixLevel :: String -> Int symbolToInfixLevel s = infixLevel $ (symbolToConstructor s) undefined undefined ----------------------- This yields an error because there is no "a" in the type signature for symbolToInfixLevel: $ runghc test_typeclass_without_typevariable.hs test_typeclass_without_typevariable.hs:1:1: The class method `symbolToInfixLevel' mentions none of the type variables of the class Foo a When checking the class method: symbolToInfixLevel :: String -> Int In the class declaration for `Foo' Now, if I define symbolToInfixLevel out of the typeclass: ----------------------- class Foo a where symbolToConstructor :: String -> ( a -> a -> a ) infixLevel :: a -> Int symbolToInfixLevel :: String -> Int symbolToInfixLevel s = infixLevel $ (symbolToConstructor s) undefined undefined ----------------------- Now, I obtain: $ runghc test_typeclass_without_typevariable.hs test_typeclass_without_typevariable.hs:7:24: No instance for (Foo a0) arising from a use of `infixLevel' In the expression: infixLevel In the expression: infixLevel $ (symbolToConstructor s) undefined undefined In an equation for `symbolToInfixLevel': symbolToInfixLevel s = infixLevel $ (symbolToConstructor s) undefined undefined How to get rid from this situation? Thanks in advance, TP