streamly-cassava: CSV streaming support via cassava for the streamly ecosystem

[ bsd3, library, streaming ] [ Propose Tags ] [ Report a vulnerability ]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.1.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), bytestring, cassava, exceptions, mtl, streamly [details]
License BSD-3-Clause
Copyright 2019 Richard Warfield
Author Richard Warfield
Maintainer richard@litx.io
Category Streaming
Home page https://github.com/litxio/streamly-cassava#readme
Bug tracker https://github.com/litxio/streamly-cassava/issues
Source repo head: git clone https://github.com/litxio/streamly-cassava
Uploaded by rwarfield at 2019-09-23T12:42:35Z
Distributions
Downloads 860 total (10 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2019-09-23 [all 1 reports]

Readme for streamly-cassava-0.1.1.0

[back to package description]

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