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-bounces@haskell.org [mailto:haskell-bounces@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])