
======================================================================= module Test where class Arg a where pr :: a -> String instance Arg Int where pr _ = "i" instance Arg Char where pr _ = "c" instance Arg a => Arg [a] where pr _ = "[" ++ pr (undefined :: a) ++ "]" -- the type variable 'a' is interpreted as an unbound one. -- (1) pr :: [a] -> String -- (2) pr (_ :: [a]) = "[" ++ pr (undefined :: a) ++ "]" ======================================================================= Dear All, I got some problem when I try to compile the above program. The problem is due to the presence of a type variable 'a' in the body of the last instance declaration. How could I refer to the type variable of Arg [a] in the instance declaration? I tried these options 1) by giving an explicit declaration for pr 2) by giving a type signature to the argument of pr with -XPatternsSignatures The first option gives me back an error : Misplaced type signature: pr :: [a] -> String The type signature must be given where `pr' is declared The second option gives me an error: Test.hs:21:12: Not in scope: type variable `a' Would anybody help me to understand this problem? Thanks in advance. Kwanghoon