作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
免责声明:这是最近在 haskell-cafe 列表上提出的问题。我向任何受到双重职位困扰的人道歉。
我知道的所有迭代实现包(例如 iteratee
、 iterIO
和 conduit
)都定义了一个枚举组合函数,除了 enumerator
包裹。在我看来,这似乎是一个严重的限制,但实现起来也相对简单:
import Data.Enumerator
import Data.Enumerator.Internal
(=$=) :: Monad m
=> Enumeratee a0 a1 m (Step a2 m b) -> Enumeratee a1 a2 m b
-> Enumeratee a0 a2 m b
(=$=) e01 e12 step = Iteratee $ do
step' <- runIteratee $ e12 step
runIteratee . joinI $ e01 step'
enumerator
的其他原因不定义枚举组成?
最佳答案
现在有 enumerator
的新版本 (0.4.17)其中包括 (=$=)
带有我上面给出的签名的运算符(operator)。我给包的作者发了电子邮件,他很好地反对在包中包含许多简化的运算符(如 ($=)
、 (=$)
和现在的 (=$=)
)。
基本上,问题在于处理剩余输入。 joinI
组合子
joinI :: Monad m => Iteratee a m (Step a' m b) -> Iteratee a m b
Stream a'
这是由内部
Iteratee
产生的.如果使用类似的样式,这不是问题
joinI (foo $$ (bar $$ baz))
关于haskell - 在枚举器中组合枚举器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674774/
我是一名优秀的程序员,十分优秀!