Skip to content
  • Simon Peyton Jones's avatar
    Fix Trac #3437: strictness of specialised functions · ef5376d5
    Simon Peyton Jones authored
    'lilac' helpful pin-pointed a space leak that was due to a specialised
    function being insufficiently strict.  Here's the new comment in SpecConstr:
    
    Note [Transfer strictness]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    We must transfer strictness information from the original function to
    the specialised one.  Suppose, for example
    
      f has strictness     SS
            and a RULE     f (a:as) b = f_spec a as b
    
    Now we want f_spec to have strictess  LLS, otherwise we'll use call-by-need
    when calling f_spec instead of call-by-value.  And that can result in 
    unbounded worsening in space (cf the classic foldl vs foldl')
    
    See Trac #3437 for a good example.
    
    The function calcSpecStrictness performs the calculation.
    
    ef5376d5