常数的预计算

问题描述

| 我在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拼接到代码中。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...