3

我有这个有效的管道表达式:

main1 = runResourceT
       $ CB.sourceHandle stdin
      $$ CB.lines
      =$ Cl.concatMap matches
      =$ Cl.mapMaybe readDouble
      =$ Cl.map fst
      =$ Cl.map bucket
      =$ Cl.map (BS.pack . show)
      =$ Cl.map (\x -> x <> BS.pack "\n")
      =$ CB.sinkHandle stdout

我无法将它分成两部分,即:

source = CB.sourceHandle stdin
  $$ CB.lines
  =$ Cl.concatMap matches
  =$ Cl.mapMaybe readDouble
  =$ Cl.map fst
  =$ Cl.map bucket

sink = Cl.map (BS.pack . show)
  =$ Cl.map (\x -> x <> BS.pack "\n")
  =$ CB.sinkHandle stdout

这样我就可以使用:

runResourceT $ source =$ sink

或者其他什么......我从类型检查器得到的错误信息有些难以理解。

4

1 回答 1

2

另一方面source,将所有运算符替换为$=,即“将源与导管融合”运算符,即左融合。

于 2013-02-21T03:54:22.953 回答