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 JSON

O 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

questionAnswers(2)

yourAnswerToTheQuestion