有效的功能表示

Yro*_*irg 1 performance haskell language-theory function

功能类型A - > B在某种意义上不是很好.虽然功能是一等值,但由于效率问题,通常无法自由操作它们.你不能应用太多的转换(A - > B) - >(C - > D),在某些时候你必须计算一个值.

显然这是由于 - >的非严格性质.

有很多技巧可以处理Double - > Double类型的函数.可以将它们表示为给定某个基础的向量,其可以包括trig函数,多项式等.

是否有任何一般技巧来绕过A - > B类型的低效率?

或者替代 - >?

scl*_*clv 5

您的担忧似乎是给定的h === f • g,f • g通常效率低于h.鉴于编译时已知的函数组合,编译器执行了两个技巧,它们可以提供f • g比您想象的更高效 - 内联和融合.内联避免了第二个函数调用的额外间接,并为优化开辟了许多新的机会.流融合(或建立/ foldr相似融合体)可(以得到一个基本的例子)翻组合物,例如map f . map gmap (f . g)从而通过一个常数因子减少的结构的遍历数目.Fusion不仅在列表上运行,还在其他结构上运行,并提供了Haskell库的高效性能的一个原因,例如Vector.

捷径融合:http://www.haskell.org/haskellwiki/Correctness_of_short_cut_fusion

流融合:什么是Haskell的Stream Fusion