Simon Peyton-Jones
Thu, 14 Jan 2010 09:00:26 -0800
In Haskell, the context of all functions in a mutually recursive group must be identical. http://haskell.org/onlinereport/decls.html#generalization
Simon From: haskell-boun...@haskell.org [mailto:haskell-boun...@haskell.org] On Behalf Of Luis Cabellos Sent: 14 January 2010 11:26 To: haskell@haskell.org Subject: [Haskell] Signature error because the order Hi, I found than this piece of code causes an error in GHC ( http://haskell.pastebin.com/m5e3f4a4c ): data Tree a = Leaf a | Node (Tree a) (Tree a) --prettyShow :: (Show a, Num a) => Tree a -> String -- WORKS prettyShow :: (Num a, Show a) => Tree a -> String -- FAILS prettyShow (Leaf a) = show a prettyShow (Node a b) = (simple a) ++ (simple b) simple :: (Show a, Num a) => Tree a -> String simple (Leaf x) = prettyShow (Leaf x) simple x = "(" ++ prettyShow x ++ ")" With the error: test.lhs:14:0: Couldn't match expected type `Show a' against inferred type `Num a1' When matching the contexts of the signatures for prettyShow :: forall a. (Num a, Show a) => Tree a -> String simple :: forall a. (Show a, Num a) => Tree a -> String The signature contexts in a mutually recursive group should all be identical When generalising the type(s) for prettyShow, simple Failed, modules loaded: none. But if I change the order of Show and Num in the signature of prettyShow it works. It's a GHC problem? it's normal than signature is order-dependent? I use GHC 6.10.3 Thanks, Luis Cabellos -- LC, ("There is no Dana, only Zuul." - Cazafantasmas [1984])
_______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell