【发布时间】:2015-01-31 13:39:28
【问题描述】:
我有兴趣创建一个新的 Haskell 容器类型(严格列表),并且我想确保对它们的操作符合流融合的条件。如何选择加入 ghc 的流融合功能?
如果我的容器是Traversable,它会自动融合吗?如果我按照toList 实现mapAccumL,Haskell 是否足够聪明,根本不会将容器转换为 List,而是简单地对底层表示进行操作?
【问题讨论】:
-
如果您想深入了解,请查看stream fusion paper。
-
ghc 没有实现流融合。它实现了 foldr/build 融合。主要区别在于 concat 只能通过 foldr/build 融合进行融合(尽管研究正在进行中),而 zip 只能通过 destroy/unfoldr 融合进行融合(与流融合密切相关)。
标签: haskell stream-fusion