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

Copyright | (c) Colin Woodbury 2015-2024 (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012
License | BSD3
Maintainer | Colin Woodbury <colin@fosskers.ca>
Safe Haskell | None
Language | Haskell2010

Lens.Micro.Aeson

Contents

- Numbers
- Objects and Arrays
- Decoding

Description

Traversals for Data.Aeson, based on microlens for minimal dependencies.

For basic manipulation of Aeson values, full `Prism` functionality isn't necessary. Since all Prisms are inherently Traversals, we provide Traversals that mimic the behaviour of the Prisms found in the original Data.Aeson.Lens.

Synopsis

- class AsNumber t where
  - _Number :: Traversal' t Scientific
  - _Double :: Traversal' t Double
  - _Integer :: Traversal' t Integer
- _Integral :: (AsNumber t, Integral a) => Traversal' t a
- nonNull :: Traversal' Value Value
- class AsNumber t => AsValue t where
  - _Value :: Traversal' t Value
  - _String :: Traversal' t Text
  - _Bool :: Traversal' t Bool
  - _Null :: Traversal' t ()
  - _Object :: Traversal' t (KeyMap Value)
  - _Array :: Traversal' t (Vector Value)
- key :: AsValue t => Key -> Traversal' t Value
- members :: AsValue t => Traversal' t Value
- nth :: AsValue t => Int -> Traversal' t Value
- values :: AsValue t => Traversal' t Value
- class AsJSON t where
  - _JSON :: (FromJSON a, ToJSON a) => Traversal' t a

# Numbers

class AsNumber t where Source #

Traverse into various number types.

Minimal complete definition

Nothing

Methods

_Number :: Traversal' t Scientific Source #

    >>> "[1, \"x\"]" ^? nth 0 . _Number
    Just 1.0

    >>> "[1, \"x\"]" ^? nth 1 . _Number
    Nothing

default _Number :: AsValue t => Traversal' t Scientific Source #

_Double :: Traversal' t Double Source #

Traversal into an `Double` over a `Value` or `Scientific`

    >>> "[10.2]" ^? nth 0 . _Double
    Just 10.2

_Integer :: Traversal' t Integer Source #

Traversal into an `Integer` over a `Value` or `Scientific`

    >>> "[10]" ^? nth 0 . _Integer
    Just 10

    >>> "[10.5]" ^? nth 0 . _Integer
    Just 10

    >>> "42" ^? _Integer
    Just 42

#### Instances

Instances details

AsNumber Value Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' Value Scientific Source # _Double :: Traversal' Value Double Source # _Integer :: Traversal' Value Integer Source #
AsNumber ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' ByteString Scientific Source # _Double :: Traversal' ByteString Double Source # _Integer :: Traversal' ByteString Integer Source #
AsNumber ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' ByteString Scientific Source # _Double :: Traversal' ByteString Double Source # _Integer :: Traversal' ByteString Integer Source #
AsNumber Scientific Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' Scientific Scientific Source # _Double :: Traversal' Scientific Double Source # _Integer :: Traversal' Scientific Integer Source #
AsNumber Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' Text Scientific Source # _Double :: Traversal' Text Double Source # _Integer :: Traversal' Text Integer Source #
AsNumber Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' Text Scientific Source # _Double :: Traversal' Text Double Source # _Integer :: Traversal' Text Integer Source #
AsNumber String Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Number :: Traversal' String Scientific Source # _Double :: Traversal' String Double Source # _Integer :: Traversal' String Integer Source #

_Integral :: (AsNumber t, Integral a) => Traversal' t a Source #

Access Integer `Value`s as Integrals.

    >>> "[10]" ^? nth 0 . _Integral
    Just 10

    >>> "[10.5]" ^? nth 0 . _Integral
    Just 10

nonNull :: Traversal' Value Value Source #

Traversal into non-`Null` values

    >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . nonNull
    Just (String "xyz")

    >>> "{\"a\": {}, \"b\": null}" ^? key "a" . nonNull
    Just (Object (fromList []))

    >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . nonNull
    Nothing

# Objects and Arrays

class AsNumber t => AsValue t where Source #

Traverse into JSON Objects and Arrays.

Minimal complete definition

_Value

Methods

_Value :: Traversal' t Value Source #

Traverse into data that encodes a `Value`

_String :: Traversal' t Text Source #

    >>> "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _String
    Just "xyz"

    >>> "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _String
    Nothing

_Bool :: Traversal' t Bool Source #

    >>> "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _Bool
    Just True

    >>> "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _Bool
    Nothing

_Null :: Traversal' t () Source #

    >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
    Just ()

    >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
    Nothing

_Object :: Traversal' t (KeyMap Value) Source #

    >>> "{\"a\": {}, \"b\": null}" ^? key "a" . _Object
    Just (fromList [])

    >>> "{\"a\": {}, \"b\": null}" ^? key "b" . _Object
    Nothing

_Array :: Traversal' t (Vector Value) Source #

#### Instances

Instances details

AsValue Value Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' Value Value Source # _String :: Traversal' Value Text Source # _Bool :: Traversal' Value Bool Source # _Null :: Traversal' Value () Source # _Object :: Traversal' Value (KeyMap Value) Source # _Array :: Traversal' Value (Vector Value) Source #
AsValue ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' ByteString Value Source # _String :: Traversal' ByteString Text Source # _Bool :: Traversal' ByteString Bool Source # _Null :: Traversal' ByteString () Source # _Object :: Traversal' ByteString (KeyMap Value) Source # _Array :: Traversal' ByteString (Vector Value) Source #
AsValue ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' ByteString Value Source # _String :: Traversal' ByteString Text Source # _Bool :: Traversal' ByteString Bool Source # _Null :: Traversal' ByteString () Source # _Object :: Traversal' ByteString (KeyMap Value) Source # _Array :: Traversal' ByteString (Vector Value) Source #
AsValue Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' Text Value Source # _String :: Traversal' Text Text Source # _Bool :: Traversal' Text Bool Source # _Null :: Traversal' Text () Source # _Object :: Traversal' Text (KeyMap Value) Source # _Array :: Traversal' Text (Vector Value) Source #
AsValue Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' Text Value Source # _String :: Traversal' Text Text Source # _Bool :: Traversal' Text Bool Source # _Null :: Traversal' Text () Source # _Object :: Traversal' Text (KeyMap Value) Source # _Array :: Traversal' Text (Vector Value) Source #
AsValue String Source # |
Instance details Defined in Lens.Micro.Aeson Methods _Value :: Traversal' String Value Source # _String :: Traversal' String Text Source # _Bool :: Traversal' String Bool Source # _Null :: Traversal' String () Source # _Object :: Traversal' String (KeyMap Value) Source # _Array :: Traversal' String (Vector Value) Source #

key :: AsValue t => Key -> Traversal' t Value Source #

Like `ix`, but for `Object` with `Key` indices. This often has better inference than `ix` when used with OverloadedStrings.

    >>> "{\"a\": 100, \"b\": 200}" ^? key "a"
    Just (Number 100.0)

    >>> "[1,2,3]" ^? key "a"
    Nothing

members :: AsValue t => Traversal' t Value Source #

A Traversal into Object properties

    >>> "{\"a\": 4, \"b\": 7}" ^.. members
    [Number 4.0,Number 7.0]

    >>> "{\"a\": 4, \"b\": 7}" & members . _Number %~ (* 10)
    "{\"a\":40,\"b\":70}"

nth :: AsValue t => Int -> Traversal' t Value Source #

Like `ix`, but for Arrays with Int indexes

    >>> "[1,2,3]" ^? nth 1
    Just (Number 2.0)

    >>> "{\"a\": 100, \"b\": 200}" ^? nth 1
    Nothing

    >>> "[1,2,3]" & nth 1 .~ Number 20
    "[1,20,3]"

values :: AsValue t => Traversal' t Value Source #

A Traversal into Array elements

    >>> "[1,2,3]" ^.. values
    [Number 1.0,Number 2.0,Number 3.0]

    >>> "[1,2,3]" & values . _Number %~ (* 10)
    "[10,20,30]"

# Decoding

class AsJSON t where Source #

Traverse into actual encoded JSON.

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' t a Source #

`_JSON` is a `Traversal` from something containing JSON to something encoded in that structure.

#### Instances

Instances details

AsJSON Value Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' Value a Source #
AsJSON ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' ByteString a Source #
AsJSON ByteString Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' ByteString a Source #
AsJSON Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' Text a Source #
AsJSON Text Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' Text a Source #
AsJSON String Source # |
Instance details Defined in Lens.Micro.Aeson Methods _JSON :: (FromJSON a, ToJSON a) => Traversal' String a Source #