我有这个管道表达式有效:
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
或者其他......我从类型检查器中获得的错误信息有点难以理解。
答案 0 :(得分:2)
在source
方面,将所有运算符替换为$=
,即“使用管道融合源”运算符,即左融合。