@hackage streamly-cassava0.1.1.0
CSV streaming support via cassava for the streamly ecosystem
Categories
License
BSD-3-Clause
Maintainer
richard@litx.io
Links
Versions
Installation
Dependencies (6)
- base >=4.7 && <5
- bytestring
- cassava
- exceptions
- mtl
- streamly Show all…
Dependents (0)
streamly-cassava
Stream CSV data in/out using Cassava. Adapted from streaming-cassava.
For efficiency, operates on streams of strict ByteString chunks
(i.e. IsStream t => t m ByteString) rather than directly on streams of Word8.
The chunkStream function is useful for generating an input stream from a
handle.
Example usage:
import Streamly
import qualified Streamly.Prelude as S
import Streamly.Csv (decode, encode, chunkStream)
import System.IO
import qualified Data.Csv as Csv
import qualified Data.ByteString as BS
import Data.Vector (Vector)
main = do
h <- openFile "testfile.csv" ReadMode
let chunks = chunkStream h (64*1024)
recs = decode Csv.HasHeader chunks :: SerialT IO (Vector BS.ByteString)
withFile "dest.csv" WriteMode $ \ho ->
S.mapM_ (BS.hPut ho) $ encode Nothing recs