常数的预计算

| 我在Haskell中有一个常量声明-我可以强制对此进行提前评估吗?我看到一些类似的代码,
myList = [(a, b), (c, d)]
...
map (f . fst) myList
我剖析
fst
通话时花点时间(它确实有168M通话)。
myList
的二进制表示形式非常小,例如可以复制到全局内存中(如果这是C程序)。我正在用
-O3 -optc-O3
进行编译。 非常感谢! 为自定义类型生成Lift实例 sclv答案中任何给
lift
调用的表达式都必须是Lift的实例。有一个名为“ 5”的库,它将为自定义数据类型生成Lift实例。请参阅该软件包的文档。     
已邀请:
使用模板Haskell生成编译时常量:
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH.Syntax(Lift(..))

test = $(lift $ (map (*20) [0..100] :: [Int]))
lift
采用Haskell值并将其提升为TH Exp。
$()
运行附带的引号,并在编译时将生成的exp拼接到代码中。     

要回复问题请先登录注册