[GHC] #1997: Stricter enumFrom instance for Integer, to match Int

GHC trac at galois.com
Fri Dec 21 14:17:12 EST 2007


#1997: Stricter enumFrom instance for Integer, to match Int
-------------------------------+--------------------------------------------
    Reporter:  dons            |       Owner:          
        Type:  proposal        |      Status:  new     
    Priority:  normal          |   Milestone:  Not GHC 
   Component:  libraries/base  |     Version:  6.8.2   
    Severity:  normal          |    Keywords:          
  Difficulty:  Easy (1 hr)     |    Testcase:          
Architecture:  Multiple        |          Os:  Multiple
-------------------------------+--------------------------------------------
 A common source of user complaints are code like the following failing:

 {{{
 main = print (head (drop 1000000 [1 .. ]))

 Stack space overflow: current size 8388608 bytes.
 Use `+RTS -Ksize' to increase it.
 }}}

 Urgh!

 Due to a lazy accumulator in enumFrom for Integer.
 While the following are all fine:

 {{{
 main = print (head (drop 1000000 [1 .. 100000000000000]))
 }}}

 (enumFromTo is strict enough on Integer), and:

 {{{
 main = print (head (drop 1000000 [(1::Int) .. ]))
 }}}

 (Int has had a strict accumulator for enumFrom since 1994.)

 "Atomic" strictness on Num operations for Int is fairly consistent
 through the base libraries (e.g. length, take, maximum), however for
 Integer it is ad hoc. maximum, for example, has a strict instance for
 Integer, but as we see here,
 enumFrom is still so lazy it fails.

 This patch adds a strict accumulator to Integer's enumFrom,
 and makes the suggestion we in future ensure Num operations on Integer
 in the base library behave as strict as Int instances.

 {{{
 -enumDeltaInteger x d = x : enumDeltaInteger (x+d) d
 +enumDeltaInteger x d = x `seq` x : enumDeltaInteger (x+d) d
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1997>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the Glasgow-haskell-bugs mailing list