[Haskell-beginners] Overloading resolution with numbers

Jason Dusek jason.dusek at gmail.com
Thu Apr 5 16:53:39 CEST 2012


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 Apr 5, 2012 7:45 AM, <j.romildo at gmail.com> wrote:

> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120405/90ba6402/attachment-0001.htm>


More information about the Beginners mailing list