microlens-aeson: Law-abiding lenses for Aeson, using microlens.

[ library, mit, numeric ] [ Propose Tags ]

Law-abiding lenses for Aeson, using microlens.


[Skip to Readme]
Versions [faq] 2.0.0, 2.1.0, 2.1.1, 2.1.1.1, 2.1.1.2, 2.1.1.3, 2.2.0, 2.2.0.1, 2.2.0.2, 2.3.0, 2.3.0.1, 2.3.0.2, 2.3.0.3, 2.3.0.4, 2.3.1 (info)
Change log CHANGELOG.md
Dependencies aeson (>=0.7.0.5 && <0.11), attoparsec (>=0.10 && <0.14), base (>=4.8 && <5), bytestring (>=0.9 && <0.11), microlens (==0.3.*), scientific (>=0.3.2 && <0.4), text (>=0.11.1.10 && <1.3), unordered-containers (>=0.2.3 && <0.3), vector (>=0.9 && <0.12) [details]
License MIT
Copyright Copyright (C) 2012 Paul Wilson Copyright (C) 2013 Edward A. Kmett Copyright (C) 2015 Colin Woodbury
Author Colin Woodbury
Maintainer Colin Woodbury <colingw@gmail.com>
Revised Revision 1 made by HerbertValerioRiedel at 2019-01-02T21:52:25Z
Category Numeric
Home page http://github.com/fosskers/microlens-aeson/
Bug tracker http://github.com/fosskers/microlens-aeson/issues
Source repo head: git clone git://github.com/fosskers/microlens-aeson.git
Uploaded by fosskers at 2015-12-30T06:14:14Z
Distributions Arch:2.3.1, LTSHaskell:2.3.0.4, NixOS:2.3.1, Stackage:2.3.0.4
Downloads 9066 total (73 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2015-12-30 [all 1 reports]

Modules

[Index]

Flags

NameDescriptionDefaultType
test-doctestsEnabledManual

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

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for microlens-aeson-2.0.0

[back to package description]

microlens-aeson

Build Status

microlens-aeson provides Traversals for the Aeson library's Value type, while obeying the Traversal laws.

microlens-aeson is derived from lens-aeson, but is based upon microlens to reduce the amount of dependencies involved.

Here is the dependency graph for lens-aeson:

lens-aeson dependencies

And that for microlens-aeson:

microlens-aeson dependencies

Usage

microlens-aeson provides Traversals into both lazy and strict variants of all the text types. Here are some examples:

{-# LANGUAGE OverloadedStrings #-}

import Data.Aeson
import Data.Text (Text)
import Lens.Micro.Aeson

--------------------------
-- Manipulating primatives
--------------------------
-- | Optionally getting one value
a :: Maybe Int
a = ("37" :: Text) ^? _Integer  -- Just 42

-- | Setting one value within encoded JSON
b :: Maybe Text
b = "true" & _Bool .~ False  -- "false"

----------------------
-- Manipulating arrays
----------------------
-- | Get all values as an Aeson type.
c :: [Value]
c = "[1, 2, 3]" ^.. values  -- [Number 1.0, Number 2.0, Number 3.0]

-- | Get all values cast to some simpler number type.
c :: [Double]
c = "[1, 2, 3]" ^.. values . _Double  -- [1.0, 2.0, 3.0]

-- | Access a specific index, and set a `Value` directly.
d :: Text
d = "[1,2,3]" & nth 1 .~ Number 20  -- "[1,20,3]"

-----------------------
-- Manipulating objects
-----------------------
-- | Access all values of the key/value pairs.
e :: Text
e = "{\"a\":4,\"b\":7}" & members . _Number %~ (*10)  -- "{\"a\":40,\"b\":70}"

-- | Access via a given key.
f :: Maybe Value
f = ("{\"a\": 100, \"b\": 200}" :: Text) ^? key "a"  -- Just (Number 100.0)

-----------------------------------
-- Aeson `Value`s from encoded JSON
-----------------------------------
g :: Maybe Text
g = "{\"a\":4,\"b\":7}" ^? _Value
-- Just (Object (fromList [("a",Number 4.0),("b",Number 7.0)]))

See the Haddock documentation for a full API specification.