如何解决常数的预计算
| 我在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拼接到代码中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。