2016-07-09 9 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] 
संबंधित मुद्दे