代码之家  ›  专栏  ›  技术社区  ›  ErikR

拆分导管链

  •  3
  • ErikR  · 技术社区  · 11 年前

    我有一个管道表达式,它有效:

    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
    

    或者其他什么。。。我从类型检查器中得到的错误消息有些不可思议。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Michael Snoyman    11 年前

    source 侧,将所有操作员更换为 $= ,即“用导管融合源”操作符,也就是左融合。