GrimssonG
呼ぶ側では、単純に結果のheadのlengthを評価するだけでテストしていたんですが、単純に出力するだけのものを試してみます。
lines
関数に任せて1行ごとにパーサーを走らせれば回避できる?readCSVTWin path >>= \x -> deepseq x (return ()))
とかですかね>何を~total memory in use
が1/3ぐらいになりました。cell = (quotedCell <|> many (noneOf ",\n\r")) >>= (\res -> return $! T.pack res)
>>=
で書いてある部分を do
で書き換えて、全部の関数に型を明示的に書いたら、処理的には何も変更していませんが 50MB ぐらい減りましたね。Strict
拡張の有無でプロファイル結果が変わったので、それっぽいです。