13

Haskellで一定の宣言があります-これを事前に評価するように強制できますか?おおよそ次のようなコードが表示されています。

myList = [(a, b), (c, d)]
...
map (f . fst) myList

プロファイルを作成するときは、fst通話に時間がかかります(1億6800万回の通話があります)。のバイナリ表現myListは非常に小さく、たとえば、[これがCプログラムの場合]グローバルメモリにコピーできます。-O3 -optc-O3もちろんコンパイルしています。

どうもありがとう!

カスタムタイプのLiftインスタンスの生成

sclvの回答で呼び出しに指定される式liftは、Liftのインスタンスである必要があります。th-liftカスタムデータ型のLiftインスタンスを生成するという名前のライブラリがあります。そのパッケージのドキュメントを参照してください。

4

1 に答える 1

13

Template Haskellを使用してコンパイル時定数を生成する:

{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH.Syntax(Lift(..))

test = $(lift $ (map (*20) [0..100] :: [Int]))

liftHaskellの値を取り、それをTHExpに持ち上げます。は$()同封の引用符を実行し、コンパイル時に生成されたexpをコードにスプライスします。

于 2011-05-25T18:47:31.840 に答える