Bas van Dijk schrieb:

I don't know why the heap and stack overflow problems go away. So lets
look at the core output of the latter program:

$ ghc-core -- -O2 FoldlProfile.hs

$wsum :: [Int] -> Int#
$wsum = \ (w_s1rS :: [Int]) -> $wfoldl_f 0 w_s1rS

$wfoldl_f :: Int# -> [Int] -> Int#
$wfoldl_f =
  \ (ww_s1rK :: Int#) (w_s1rM :: [Int]) ->
    case w_s1rM of _ {
      [] -> ww_s1rK;
      : x_aeb xs_aec ->
        case x_aeb of _ { I# y_aUb ->
        $wfoldl_f (+# ww_s1rK y_aUb) xs_aec
        }
    }

Apparently, because of the latter foldl definition, GHC is able to
optimize the foldl for uboxed ints.

But why doesn't the recursive call:

 $wfoldl_f (+# ww_s1rK y_aUb) xs_aec

allocate (+# ww_s1rK y_aUb) on the heap? Are unboxed values always
evaluated strictly?
I think so.


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to