[GHC] #3404: Strictness analysis bug with Double

GHC trac at galois.com
Wed Jul 29 17:17:58 EDT 2009


#3404: Strictness analysis bug with Double
------------------------------+---------------------------------------------
 Reporter:  lpsmith           |          Owner:                  
     Type:  bug               |         Status:  new             
 Priority:  normal            |      Milestone:                  
Component:  Compiler          |        Version:  6.10.4          
 Severity:  normal            |     Resolution:                  
 Keywords:                    |       Testcase:                  
       Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
------------------------------+---------------------------------------------
Comment (by dons):

 sum is defined as foldl (+). For some atomic types (Int, Integer) we
 generate specialized versions, but not for Double currently.

 This is an example of the broader syndrome of irregular specializations in
 the base library. Other tickets:

  #2251
  #2270
  #2271

 Notably it is solved by #915  or by doing regular RULES/SPECIALIZE for all
 atomic numeric types, for base functions on Num a => a ...

 Another solution is to use uvector (stream fusion again).

 {{{
 import Data.Array.Vector

 main = print (sumU (enumFromToFracU 1 1e7) :: Double)


 $wfold :: Double#               -> Double#    -> Double#

 $wfold =
   \ (ww_s15b :: Double#) (ww1_s15f :: Double#) ->
     case >## ww1_s15f 1.00000005e7 of wild_aWD {
       False ->
         $wfold
           (+## ww_s15b ww1_s15f) (+## ww1_s15f 1.0);
       True -> ww_s15b
 }}}

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


More information about the Glasgow-haskell-bugs mailing list