Abschnitt 2.3.1.1 "Ein Hinweis auf Fusion" von Haskell Wiki's Numeric Haskell page erklärt Schleife Fusion durch den optimierten Code zeigt, wie in dem folgenden:Wie das Ergebnis der Schleifenfusion in Haskell dump?
Vor der Optimierung:
import qualified Data.Vector as V
test :: V.Vector Int -> Double
test = V.foldl (\ a b -> a * sqrt (fromIntegral b)) 0
create :: Int -> V.Vector Int
create n = (V.enumFromTo 1 n)
main = print (test (create 1000000))
Nach der Optimierung:
main_$s$wfoldlM_loop :: Int# -> Double# -> Double#
main_$s$wfoldlM_loop =
\ (sc_sWA :: Int#) (sc1_sWB :: Double#) ->
case <=# sc_sWA 1000000 of _ {
False -> sc1_sWB;
True ->
main_$s$wfoldlM_loop
(+# sc_sWA 1)
(*##
sc1_sWB (sqrtDouble# (int2Double# sc_sWA)))
}
Ich bin gespannt, wie ich den optimierten Code so sehen kann. Der Artikel erwähnte ghc-core Werkzeug, aber zeigte den spezifischen Befehl nicht.