sv: Encode and decode separated values (CSV, PSV, ...)
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.
Warnings:
- 'ghc-options: -O2' is rarely needed. Check that it is giving a real benefit and not just imposing longer compile times on your users.
sv (separated values) is a library for parsing, decoding, encoding, and printing CSV and similar formats (such as PSV, TSV, and many more).
sv uses an Applicative combinator style for decoding and encoding, rather than a type class based approach. This means we can have multiple decoders for the same type, multiple combinators of the same type, and we never have to worry about orphan instances. These decoders can be stitched together from provided primitives and combinators, or you can build one from a parser from your favourite parser combinator library.
For parsing, sv uses hw-dsv, a high performance streaming CSV parser based on rank-select data structures. sv works with UTF-8, and should work with CP-1252 as well. It does not work with UTF-16 or UTF-32.
sv returns values for all errors that occur - not just the first. Errors have more structure than just a string, indicating what went wrong.
sv tries not to be opinionated about how your data should look. We intend for the user to have a great degree of freedom to build the right decoder for their dataset.
Parts of sv are intended to be imported as follows:
import Data.Sv import qualified Data.Sv.Decode as D import qualified Data.Sv.Encode as E
Examples:
Decoding a real CSV: Species.lhs
Decoding by column name: Columnar.hs
Encoding data to a CSV: Encoding.hs
Encoding data to a CSV with a header: EncodingWithHeader.hs
Handling NULL and Unknown occuring in a column of numbers: Numbers.hs
Dealing with non-rectangular data: Ragged.hs
Integrating with an existing attoparsec parser to read date stamps: TableTennis.hs
To get the best performance, the hw-dsv parser and its dependencies
underlying sv should be compiled with the flag +bmi2
to enable . These
libraries are: bits-extra
, hw-rankselect
, hw-rankselect-base
, and
hw-dsv
. A simple way to set the flags for all of them when building with
cabal is to include a cabal.project file in your project containing
something like the following:
packages: . package bits-extra flags: +bmi2 package hw-rankselect flags: +bmi2 package hw-rankselect-base flags: +bmi2 package hw-dsv flags: +bmi2
Properties
Versions | 0.1, 1.0, 1.1, 1.1.1, 1.2, 1.3, 1.3.0.1, 1.3.1, 1.3.1, 1.4, 1.4.0.1 |
---|---|
Change log | changelog.md |
Dependencies | attoparsec (>=0.12.1.4 && <0.14), base (>=4.8 && <4.13), bifunctors (>=5.1 && <5.6), bytestring (>=0.9.1.10 && <0.11), contravariant (>=1.2 && <1.6), hw-dsv (>=0.2.1 && <0.4), semigroupoids (>=5 && <5.4), sv-core (>=0.4.1 && <0.4.2), transformers (>=0.2 && <0.6), utf8-string (>=1 && <1.1), validation (>=1 && <1.1) [details] |
License | BSD-3-Clause |
Copyright | Copyright (c) 2017-2019, Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230. |
Author | George Wilson |
Maintainer | george@qfpl.io |
Category | CSV, Text, Web |
Home page | https://github.com/qfpl/sv |
Bug tracker | https://github.com/qfpl/sv/issues |
Source repo | head: git clone git@github.com/qfpl/sv.git |
Uploaded | by qfpl at 2019-04-02T04:20:02Z |
Modules
[Index] [Quick Jump]
Downloads
- sv-1.3.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees