cassava-conduit: Conduit interface for cassava package

[ bsd3, data, library ] [ Propose Tags ]

Conduit interface for cassava package

PRs welcome.


[Skip to Readme]

Modules

[Last Documentation]

  • Data
    • Csv
      • Data.Csv.Conduit

Flags

Automatic Flags
NameDescriptionDefault
small_base

Choose the new, split-up base package.

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.0.1, 0.1.0, 0.2.0, 0.2.1, 0.2.2, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.5.1, 0.4.0.0, 0.4.0.1, 0.4.0.2, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6
Change log CHANGELOG.md
Dependencies array, base (>=4 && <5), bifunctors (>=4.2 && <6), bytestring (>=0.10 && <0.11), cassava (>=0.4 && <0.5), conduit (>=1.2 && <1.3), conduit-extra (>=1.1 && <1.2), containers, mtl (>=2.2 && <2.3), text (>=1.2 && <1.3) [details]
License BSD-3-Clause
Copyright Copyright (C) 2014-2016 Dom De Re
Author Dom De Re
Maintainer Dom De Re
Category Data
Home page https://github.com/domdere/cassava-conduit
Bug tracker https://github.com/domdere/cassava-conduit/issues
Source repo head: git clone https://github.com/domdere/cassava-conduit
Uploaded by domdere at 2016-01-28T06:09:18Z
Distributions LTSHaskell:0.6.6, Stackage:0.6.6
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 13015 total (91 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2016-11-28 [all 3 reports]

Readme for cassava-conduit-0.3.1

[back to package description]

cassava-conduit Build Status Hackage

Conduit interface for cassava package

Streaming to CSV is not 100% complete at this stage, and doesn't support encoding to CSV with a header yet

Example Usage

The examples project

There is a project containing some examples of the usage, but the gist is here:


import Data.Csv
import Data.Conduit
import Data.Csv.Conduit

data InputRecord = ...

instance FromRecord InputRecord where
    ...

data OutputRecord = ...

instance ToRecord OutputRecord where
    ...

decodeOpts :: Word8 -> DecodeOptions

encodeOpts :: Word8 -> EncodeOptions

processInput :: InputRecord -> OutputRecord

-- |
--  A Conduit pipeline that streams from '../exampledata/sampleinput.psv', decodes it from a pipe seperated format,
--  processes it with 'processInput' and the encodes it to pipe seperated format and streams it out to '../exampledata/sampleoutput.psv'
--  The first time it encounters a parse error, it will stop streaming and return the error, dropping any decoded records that came through in that batch also...
--
conduitPipeline :: (MonadError CsvParseError m, MonadResource m) => m ()
conduitPipeline = sourceFile "../exampledata/sampleinput.psv" $$ fromCsv (decodeOpts $ fromIntegral $ ord '|') HasHeader =$= map processInput =$= toCsv (encodeOpts $ fromIntegral $ ord '|') =$= sinkFile "../exampledata/sampleoutput.psv"

main :: IO ()
main = do
    res <- runEitherT $ bimapEitherT showError id $ runResourceT conduitPipeline
    either putStrLn return res

Building the examples project

$ cd examples
$ cabal sandbox init
$ cabal sandbox add-source ../
$ cabal install --only-dependencies
$ cabal build

Building the project

make build

Running Unit Tests

make test

Running Benchmarks

After running cabal configure --enable-benchmarks and cabal build, the following command will run the benchmarks:

cabal bench

For newer versions of cabal, cabal bench will run a cabal build automatically if necessary..