enumFromThenTo for Doubles

Simon Peyton Jones simonpj at microsoft.com
Wed Aug 10 20:50:12 UTC 2016

Sounds somewhat plausible.  By all means give it a try.


-----Original Message-----
From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Andrew Farmer
Sent: 10 August 2016 04:22
To: ghc-devs at haskell.org
Subject: enumFromThenTo for Doubles

Noticed this today:

ghci> let xs = [0.0,0.1 .. 86400.0] in maximum xs

enumFromThenTo is implemented by numericEnumFromThenTo:


Which probably accumulates error in numericEnumFromThen with the (m+m-n):

numericEnumFromThen n m = n `seq` m `seq` (n : numericEnumFromThen m (m+m-n))

Why not define numericEnumFromThen as:

numericEnumFromThen n m = let d = m - n in d `seq` go d n
where go delta x = x `seq` (x : go delta (x + delta))

(or with BangPatterns)

numericEnumFromThen n m = go (m - n) n
where go !delta !x = x : go delta (x + delta)

Seems like we'd save a lot of subtractions by using the worker function.
ghc-devs mailing list
ghc-devs at haskell.org

More information about the ghc-devs mailing list