2016-07-09 7 views
8

コンパイル時に次のような式が評価されることを保証する方法はありますか?コンパイル時の最上位の式評価

myList :: [Int] 
myList = sort [3,2,0,1] 
+2

生成されたコアをチェックして、最適化が実行されたかどうかを確認できます。しかし、AFAIK、それを強制する方法はありません。 – chi

答えて

7

何を評価していることLiftのインスタンスである場合、あなたはTemplateHaskellを使用してコンパイル時に、それを評価することができます。

{-# LANGUAGE TemplateHaskell #-} 

module Sort where 

import Data.List 
import Language.Haskell.TH.Syntax 

myList :: [Int] 
myList = $(lift (sort [3,2,0,1] :: [Int])) 

したい場合、あなたはそれが-ddump-splicesとにまとめたものを確認することができます:

$ ghc -ddump-splices sort 
[1 of 1] Compiling Sort    (sort.hs, sort.o) 
sort.hs:9:12-41: Splicing expression 
    lift (sort [3, 2, 0, 1] :: [Int]) ======> [0, 1, 2, 3]