首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流融合在Haskell中是如何工作的?

流融合在Haskell中是如何工作的?
EN

Stack Overflow用户
提问于 2016-08-05 19:31:39
回答 1查看 499关注 0票数 3

我可以在Haskell中编写自己的受流融合影响的map函数吗?

为什么列表上的递归迭代不受融合的影响?这完全扼杀了Haskell模式匹配的出色表现力:foo (x:xx) ...

是否融合了前置循环函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-06 18:57:05

Haskell中的流融合是使用重写规则(see the ghc documentation for more info)完成的。您可以使用RULES杂注在代码中指定这些规则。

重写规则的基本思想是,您指定了一组可以在编译时重写代码的方法。例如,如果您将自己的map版本定义为map',则可以执行以下操作

代码语言:javascript
复制
{-# RULES 
   "map'/map'" forall f g xs. map' f (map' g xs) = map' (f . g) xs
  #-}

这引入了一个名为map'/map'的重写规则。该规则所做的是,它将重写列表上函数f的每个映射,该列表依次将某个xs上的g映射为这些X上的(f . g)的一个映射。

使用重写规则还有许多其他的子项。例如,您可以指定在编译器的哪个阶段应用规则,而编译器无法检查这些规则是否正确。

重写结果仍然是类型检查的,但如果你在重写规则中做了一些语义上不正确的事情,那完全是你的错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38788221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档