2

私は機能を持っています:

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

そのように定義されています (トリックについてはGHC のドキュメントを参照してください)。

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

  • プログラム(comp (f a)あり)、実行(あり-fexpose-all-unfoldings)、Core--$wa2後者の場合fa

4

1 に答える 1

1

これらの定義の where 句に {-# INLINE f'1 #-} および f'2 を追加します。

于 2013-02-07T11:14:48.477 に答える