The 1 is not necessarily an Integer nor is it necessarily a Float, Double
or Rational. GHC applies so called type-defaulting rules to make a
best guess in this scenario. Informally, if it could be an Integer (due
to lack of static evidence to the contrary), then you can expect the
defaulting rules to assign it that type.
--
Jason Dusek
On Thu, Apr 05, 2012 at 01:18:39PM +0000, Amy de Buitléir wrote:
> <j.romildo <at> gmail.com> writes:
> > Why does (read "2" + 1) works, but (read "2.3" + 1) fail at runtime?
>
> Try this:
>
> read "2.3" + 1 :: Float
>
> Or this:
>
> read "2.3" + 1.0
>
> The reason that your version didn't work is because GHCi is guessing that you
> want the read operation to parse an Integer, since you're adding it to 1.
This is explanation does not seem to be enough once we consider the type
of the literal 1:
Prelude> :t 1
1 :: Num a => a
That is, the literal 1 is overloaded to any numeric type. It is not
necessarily an Integer.
Romildo
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners