2013-02-21 75 views
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 

或其他......我從類型檢查器得到的錯誤消息有點難以理解。

回答

2

source一側,用$=替換所有的運算符,這是「帶導管的源頭」操作符,也就是左聚變。