Bifurcação do fluxo de fluxo em tubos haskell
Estou tendo problemas para direcionar o fluxo através de um oleoduto com tubos haskell. Basicamente, analiso vários arquivos e, em seguida, tenho que
imprimir os resultados no terminal de maneira amigável ao ser humanocodificar resultados para JSONO caminho escolhido depende de uma opção de linha de comando.
No segundo caso, eu tenho que emitir um colchete de abertura, depois todo valor recebido seguido por uma vírgula e depois um colchete de fechamento. AtualmenteinsertCommas
nunca termina, portanto o colchete de fechamento nunca é emitido.
import Pipes
import Data.ByteString.Lazy as B
import Data.Aeson (encode)
insertCommas :: Consumer B.ByteString IO ()
insertCommas = do
first <- await
lift $ B.putStr first
for cat $ \obj -> lift $ do
putStr ","
B.putStr obj
jsonExporter :: Consumer (FilePath, AnalysisResult) IO ()
jsonExporter = do
lift $ putStr "["
P.map encode >-> insertCommas
lift $ putStr "]"
exportStream :: Config -> Consumer (FilePath, AnalysisResult) IO ()
exportStream conf =
case outputMode conf of
JSON -> jsonExporter
_ -> P.map (export conf) >-> P.stdoutLn
main :: IO ()
main = do
-- The first two lines are Docopt stuff, not relevant
args <- parseArgsOrExit patterns =<< getArgs
ins <- allFiles $ args `getAllArgs` argument "paths"
let conf = readConfig args
runEffect $ each ins
>-> P.mapM analyze
>-> P.map (filterResults conf)
>-> P.filter filterNulls
>-> exportStream conf