我有这个功能:
{-# 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?
更新
在现实世界中(呵呵):
答案 0 :(得分:1)
在这些定义的where子句中添加{ - #INLINE f'1# - }和f'2。