GHC不执行2阶段部分应用内联

时间:2013-02-07 10:31:20

标签: haskell optimization inline ghc

我有这个功能:

{-# INLINE f #-}
f x =
    \ y ->
        \z -> ...

定义如此(请参阅GHC docs关于诀窍)因为我需要2阶段应用内联,例如

comp (f a) ...
...
comp pAppliedF b1 b2 ... =
    f'1 = pAppliedF b1 -- I need these 2 functions inlined
    f'2 = pAppliedF b2

但是,我这样获得Core

fa = \ y z -> ...
...
-- `comp` is inlined
-- Even though there are happy partial applications:
let f'1 = fa smth1
    f'2 = fa smth2
in ...

如何在这里击败GHC?

更新
在现实世界中(呵呵):

  • f

  • comp,下面20行:f'1, f'2,实际上已压缩为fixed-vector

  • programcomp (f a)那里),run(包含-fexpose-all-unfoldings),Core - $wa2在后​​者中fa

1 个答案:

答案 0 :(得分:1)

在这些定义的where子句中添加{ - #INLINE f'1# - }和f'2。