核心是GHC的中间语言.阅读核心可以帮助您更好地了解您的计划的性能.有人问我关于阅读Core的文档或教程,但我找不到多少.
有哪些文档可供阅读GHC Core?
这是我到目前为止所发现的:
这是我之前的一个问题的后续问题,我在其中询问为什么流融合不是在某个程序中踢.结果证明问题在于某些函数没有内联,并且一个INLINE标志通过about改进了性能17x(这表明了内联的重要性!).
现在,请注意,在最初的问题上,我立刻硬编码64了incAll.现在,假设我创建了一个nTimes函数,它重复调用一个函数:
module Main where
import qualified Data.Vector.Unboxed as V
{-# INLINE incAll #-}
incAll :: V.Vector Int -> V.Vector Int
incAll = V.map (+ 1)
{-# INLINE nTimes #-}
nTimes :: Int -> (a -> a) -> a -> a
nTimes 0 f x = x
nTimes n f x = f (nTimes (n-1) f x)
main :: IO ()
main = do
let size …Run Code Online (Sandbox Code Playgroud)