• Joachim Breitner's avatar
    Call Arity: In "e x", the result of "x" is not shared · a58eeb7f
    Joachim Breitner authored
    in contrast to "e (f x)", where CorePrep will turn it into "let y = f x
    in e x". So in
      let f = ...
      in e (f x)
    we know that f is called at most once, but in
      let f = ...
      in e f
    we do not know that.
    
    Previously Call Arity would assume that in "e x", "x" is evaluated at
    most once. This rarely would make a difference (the argument "x" is
    analized with an incoming arity of 0, so no eta-expansion would be done
    anyways), but of course this should still be fixed.
    
    This fixes #11064.
    
    Note the corresponding code dmdTransformThunkDmd in DmdAnal.
    a58eeb7f
CallArity.hs 27.9 KB