haskell-pipes を使用したパイプラインを介してフローを誘導するのに問題があります。基本的に、私はたくさんのファイルを分析してから、次のいずれかを行う必要があります
- 人間に優しい方法で結果を端末に出力する
- 結果を JSON にエンコードする
選択されるパスは、コマンド ライン オプションによって異なります。
2 番目のケースでは、左角かっこを出力し、次にすべての入力値にコンマ、次に右角かっこを出力する必要があります。現在insertCommas
は終了しないため、閉じ括弧は出力されません。
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