gat*_*ado 13 performance haskell lazy-evaluation compile-time template-haskell
我在Haskell中有一个持续的声明 - 我可以提前对它进行评估吗?我看到一些看起来很像的代码,
myList = [(a, b), (c, d)]
...
map (f . fst) myList
Run Code Online (Sandbox Code Playgroud)
fst当我对它进行分析时,它会在通话中占用一些时间(它有168M的呼叫).二进制表示myList非常小,例如,可以复制到全局内存[如果这是一个C程序].我正在编译-O3 -optc-O3.
非常感谢!
lift在sclv的答案中给出调用的任何表达式都必须是Lift的一个实例.有一个名为library的库th-lift,它将为自定义数据类型生成Lift实例.查看该软件包的文档.
scl*_*clv 13
使用Template Haskell生成编译时常量:
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH.Syntax(Lift(..))
test = $(lift $ (map (*20) [0..100] :: [Int]))
Run Code Online (Sandbox Code Playgroud)
lift获取Haskell值并将其提升为TH Exp.的$()运行封闭报价,并拼接所生成的记录到在编译时的代码.
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |