[Haskell-cafe] reading and writing Data.Ratio.Rational

Patrick Chilton chpatrick at gmail.com
Fri Feb 24 14:35:41 UTC 2017


Prelude> import Numeric
Prelude Numeric> fst $ head $ readFloat "0.1234" :: Rational
617 % 5000

On Fri, Feb 24, 2017 at 1:17 PM, Olaf Klinke <olf at aatal-apotheke.de> wrote:

> Dear cafe,
>
> when processing text files containing numbers of the form "xxxx.yyyy" I
> used to parse them into Double using that type's Read instance. Obviously,
> even with arithmetic no more complicated than the field operations the
> result might have ugly rounding errors like 12.000000000002 due to the fact
> that numbers like 0.7 are not dyadic rationals. The math in my program is
> not complicated and the numbers are not large, so I don't care about
> Rationals having potentially huge memory footprints.
>
> So here's my question. A literal like 0.7 has type Fractional a => a, but
> the Read instance of Rational rejects the string "0.7". Must it be this
> way? Do I have to go via toRational.(read :: String ->
> Data.Scientific.Scientific)?
>
> Note that the documentation of Data.Scientific explicitly states that
> using (/) is unsafe, so I'd rather stay with the field Rational.
>
> For the output as decimal expansion, there is of course long division as
> described here [1], but I wonder whether either this exists in some library
> or there is even a more efficient solution.
>
> Any pointers are appreciated.
> Thanks,
> Olaf
>
> [1] http://stackoverflow.com/questions/30931369/how-to-
> convert-a-rational-into-a-pretty-string
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170224/750f7a57/attachment.html>


More information about the Haskell-Cafe mailing list