lens-csv

[ bsd3, library, unclassified ] [ Propose Tags ]

Please see the README on GitHub at https://github.com/ChrisPenner/lens-csv#readme


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.1.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), bytestring, cassava, lens [details]
License BSD-3-Clause
Copyright Chris Penner
Author Chris Penner
Maintainer christopher.penner@gmail.com
Home page https://github.com/ChrisPenner/lens-csv#readme
Bug tracker https://github.com/ChrisPenner/lens-csv/issues
Source repo head: git clone https://github.com/ChrisPenner/lens-csv
Uploaded by ChrisPenner at 2020-04-06T00:04:24Z
Distributions NixOS:0.1.1.0
Downloads 301 total (42 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for lens-csv-0.1.1.0

[back to package description]

lens-csv

If you enjoy working with lenses (or need a hand learning how they work) my book Optics By Example is a great place to learn more!

Optics By Example

A lensy layer on top of Cassava which affords streaming, traversable, CSV parsing.

Still experimental (but working). Please file an issue if there are features the library doesn't support.

Example:

>>> import Data.ByteString.Lazy as BL
>>> myCsv <- BL.readFile "./data/simple.csv"
>>> myCsv ^.. namedCsv . taking 2 rows . column @String "state_code" 
[ "NY"
, "CA"
]

>>> myCsv ^.. namedCsv . taking 2 rows . _NamedRecord @(M.Map String String)
[ fromList [("population","19540000"), ("state_code","NY")]
, fromList [("population","39560000"), ("state_code","CA")]
]

-- For csv files without headers
>>> myCsv ^.. csv . taking 2 rows . _Record @[String]
[ ["state_code", "population"]
, ["NY"        , "19540000"]
]

-- 'column' infers whether it's a named or unnamed csv and accepts the appropriate index type (either ByteString or Int)
>>> myCsv ^.. csv . rows . column @Int 1
[19540000,39560000]

-- Use traversals to edit cells 'in-place' (add 1337 to California's population)
>>> BL.putStrLn $ myCsv & namedCsv . row 1 . column @Int "population" +~ 1337
state_code,population
NY,19540000
CA,39561337