4
2.3.1.1項には、次のように最適化されたコードを示すことによって、ループ融合を説明します。最適化前のハスケルでループフュージョンの結果をダンプする方法は? <a href="https://wiki.haskell.org/Numeric_Haskell:_A_Vector_Tutorial" rel="nofollow">Haskell Wiki's Numeric Haskell page</a>の "融合上の注意事項"
:最適化の後
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))
:
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)))
}
このように最適化されたコードがどのように見えるのか不思議です。記事はghc-core toolと記載しましたが、特定のコマンドは表示されませんでした。