[Haskell-cafe] A question about "monad laws"

Uwe Hollerbach uhollerbach at gmail.com
Tue Feb 12 13:43:19 EST 2008


On Feb 12, 2008 6:12 AM, Jan-Willem Maessen <jmaessen at alum.mit.edu> wrote:

>
> On Feb 12, 2008, at 1:50 AM, David Benbennick wrote:
>
> > On Feb 11, 2008 10:18 PM, Uwe Hollerbach <uhollerbach at gmail.com>
> > wrote:
> >> If I fire up ghci, import
> >> Data.Ratio and GHC.Real, and then ask about the type of "infinity",
> >> it
> >> tells me Rational, which as far as I can tell is Ratio Integer...?
> >
> > Yes, Rational is Ratio Integer.  It might not be a good idea to import
> > GHC.Real, since it doesn't seem to be documented at
> > http://www.haskell.org/ghc/docs/latest/html/libraries/.  If you just
> > import Data.Ratio, and define
> >
> >> pinf :: Integer
> >> pinf = 1 % 0
> >
> >> ninf :: Integer
> >> ninf = (-1) % 0
> >
> > Then things fail the way you expect (basically, Data.Ratio isn't
> > written to support infinity).  But it's really odd the way the
> > infinity from GHC.Real works.  Anyone have an explanation?
>
> An educated guess here: the value in GHC.Real is designed to permit
> fromRational to yield the appropriate high-precision floating value
> for infinity (exploiting IEEE arithmetic in a simple, easily-
> understood way).  If I'm right, it probably wasn't intended to be used
> as a Rational at all, nor to be exploited by user code.
>
> -Jan-Willem Maessen
>
>
Well... I dunno. Looking at the source to GHC.Real, I see

infinity, notANumber :: Rationalinfinity   = 1 :% 0notANumber = 0 :% 0

This is actually the reason I imported GHC.Real, because just plain %
normalizes the rational number it creates, and that barfs very quickly when
the denominator is 0. But the values themselves look perfectly reasonable...
no?

Uwe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080212/24c6d037/attachment.htm


More information about the Haskell-Cafe mailing list