用newtype重写规则

时间:2017-04-09 09:58:33

标签: haskell optimization newtype

Rewrite rules可以帮助您优化程序。如果我将对象包裹在newtype中,我想知道它们是否会起作用。众所周知,newtype并没有带来性能损失,它是一个在运行时消失的编译时包装器。所以我想知道是否仍会使用newtype触发重写规则。例如,Data.TextWhat is fusion in Haskell?)有很多规则。

GHC用户指南警告算法的非智能性:

  

GHC目前使用一种非常简单的语法匹配算法来匹配规则LHS和表达式。它寻求一种替代,使得LHS和表达在语法上等于模α转换。如果需要,模式(规则),但不是表达式,是eta扩展的。 (Eta扩展表达式可能导致懒惰错误。)但不是beta转换(称为高阶匹配)。

现在我正在使用Identity Text(由于某些原因)。我还能获得这些性能优势吗?我不是自己执行基准测试的重写规则专家,并确保他们的结果。

1 个答案:

答案 0 :(得分:6)

重写规则适用于GHC的中间语言Core(而不是Haskell)。到那时,newtype大部分都消失了。例如,Identity x变为x |> c,其中c强制 x :: Text强制转换为类型{{ 1}}。

这些演员阵容可以相互抵消,然后规则可以照常开火。如果一切都到位,你仍然应该能够获得文本重写规则的好处。

不幸的是,没有硬性保证,并且没有查看中间代码(并且知道要查找什么,例如,如果您知道应该发生融合的某个地方),您无法确定使用{{1}这里不需要付出代价。

相关问题