【发布时间】:2016-11-11 21:53:46
【问题描述】:
有什么方法可以确保在编译时评估如下表达式?
myList :: [Int]
myList = sort [3,2,0,1]
【问题讨论】:
-
您可以检查生成的 Core 以查看是否执行了优化。但是,AFAIK,没有办法强制这样做。
标签: haskell compile-time-constant
有什么方法可以确保在编译时评估如下表达式?
myList :: [Int]
myList = sort [3,2,0,1]
【问题讨论】:
标签: haskell compile-time-constant
如果您要评估的是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]
【讨论】: