2

我有这个功能:

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

它是这样定义的(有关技巧,请参阅GHC 文档),因为我需要 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

  • program ( comp (f a)there), run (with -fexpose-all-unfoldings), Core--$wa2在后者中fa

4

1 回答 1

1

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

于 2013-02-07T11:14:48.477 回答