[Haskell-cafe] Help understanding type error
Levi Stephen
levi.stephen at optusnet.com.au
Thu Sep 6 23:21:46 EDT 2007
Hi,
I'm after some help understanding either what I'm doing wrong, or why this error
occurs.
I have a data type:
> data T a = forall b. (Show b) => T b a
and I want to use/extract 'b' from this.
> extShow (T b _) = b
This gives the following compilation error:
extest.hs:5:0:
Inferred type is less polymorphic than expected
Quantified type variable `b' escapes
When checking an existential match that binds
$dShow :: {Show b}
b :: b
The pattern(s) have type(s): T t
The body has type: b
In the definition of `extShow': extShow (T b _) = b
I tried adding a type signature:
> extShow' :: (Show b) => T a -> b
> extShow' (T b _) = b
Now I get a different error:
extest.hs:8:19:
Couldn't match expected type `b' (a rigid variable)
against inferred type `b1' (a rigid variable)
`b' is bound by the type signature for `extShow'' at extest.hs:7:18
`b1' is bound by the pattern for `T' at extest.hs:8:10-14
In the expression: b
In the definition of `extShow'': extShow' (T b _) = b
It seems (to newbie me ;) ) like it should be possible to extract the first part
of T, and deduce that it is an instance of the class 'Show'.
The following seems ok:
> doShow (T b _) = putStrLn (show b)
Thanks,
Levi
More information about the Haskell-Cafe
mailing list