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

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Please see the README on GitHub at https://github.com/litxio/streamly-cassava#readme


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.1.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:39:51Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


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