在pipes
包中,教程Control.Pipes.Tutorial
[1]展示了如何使用monad >>
运算符“垂直堆叠”管道组件。
我如何使用Control.Frame进行此操作?
例如,使用Control.Frame教程中的定义:
source1 = fromList [1..10]
source2 = fromList [30..40]
-- combine two sources:
runFrame $ printer <-< (source1 ??? source2)
-- combine two transformers:
runFrame $ printer <-< (take' 3 ??? take' 2) <-< fromList [1..]
在>>
处使用???
不会进行类型检查。
[1] http://hackage.haskell.org/packages/archive/pipes/latest/doc/html/Control-Pipe-Tutorial.html#g:4
更新:以下是我一直在尝试的内容:http://hpaste.org/77986
看起来问题是close
- 请参阅上面粘贴中的函数bar8
。
如果我没有明确地>>
,那么这些框架可以与close
合成。当然,我最终需要关闭它们。嗯....
答案 0 :(得分:1)
Frame
不是monad,它是一个索引的monad。这意味着普通的monad运算符将无法工作,您必须导入它们的索引版本。根据{{3}},这意味着将以下内容添加到文件的顶部:
{-# LANGUAGE RebindableSyntax #-}
import Control.Frame
import Control.IMonad.Do
import Control.IMonad.Trans
import Prelude hiding (Monad(..))