[Haskell-cafe] Usage of Read Class
Ariel J. Birnbaum
valgarv at gmx.net
Sun Mar 30 17:51:54 EDT 2008
> > <interactive>:1:1:
> > Ambiguous type variable `a' in the constraint:
> > `Read a' arising from a use of `read' at <interactive>:1:1-4
> > Probable fix: add a type signature that fixes these type variable(s)
>
> What the error message says is, it doesn't know which type to read to.
> read has the type Read a => String -> a, and unless you tell it what
> 'a' is going to be, how would it know? If you say '(read.show) x ::
> Color' it should work just fine.
Just to sharpen the point: read cannot know from the string it processes which
type to deliver.
For example, try the following at the ghci prompt:
read "3" -> Yields the same error as above
read "3" + 3 -> 6
read "3" + 3.3 -> 6.3
read "3.3" + 3.3 -> 6.6
read "3.3" + 3 -> Error: no parse
What's happening is that the type of the expression is determined by the
literal on the _right_side_ of the + sign, and not by the contents of the
string on the left side.
The last example is a bit tricky. ghci sees 3 on the rhs, which can be of any
type in the Num class (as opposed to 3.3, which has to be of a Fractional
type). If unresolved, it will default to Integer (or Int?), and try to
parse "3.3" as such -- which will of course fail.
--
Ariel J. Birnbaum
More information about the Haskell-Cafe
mailing list