lens-aeson-1.0.2: Law-abiding lenses for aeson

Copyright | (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012
License | BSD3
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | Trustworthy
Language | Haskell98

Data.Aeson.Lens

Contents

- Numbers
- Primitive
- Objects and Arrays
- Decoding
- Orphan instances

Description

This module also exports orphan ``Ixed` `Value`` and ``Plated` `Value`` instances.

Synopsis

- class AsNumber t where
  - _Number :: Prism' t Scientific
  - _Double :: Prism' t Double
  - _Integer :: Prism' t Integer
- _Integral :: (AsNumber t, Integral a) => Prism' t a
- nonNull :: Prism' Value Value
- data Primitive
  - = StringPrim !Text
  - | NumberPrim !Scientific
  - | BoolPrim !Bool
  - | NullPrim
- class AsNumber t => AsPrimitive t where
  - _Primitive :: Prism' t Primitive
  - _String :: Prism' t Text
  - _Bool :: Prism' t Bool
  - _Null :: Prism' t ()
- class AsPrimitive t => AsValue t where
  - _Value :: Prism' t Value
  - _Object :: Prism' t (HashMap Text Value)
  - _Array :: Prism' t (Vector Value)
- key :: AsValue t => Text -> Traversal' t Value
- members :: AsValue t => IndexedTraversal' Text t Value
- nth :: AsValue t => Int -> Traversal' t Value
- values :: AsValue t => IndexedTraversal' Int t Value
- class AsJSON t where
  - _JSON :: (FromJSON a, ToJSON a) => Prism' t a

# Numbers

class AsNumber t where Source #

Minimal complete definition

Nothing

Methods

_Number :: Prism' t Scientific Source #

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

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

_Number :: AsPrimitive t => Prism' t Scientific Source #

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

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

_Double :: Prism' t Double Source #

Prism into an `Double` over a `Value`, `Primitive` or `Scientific`

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

_Integer :: Prism' t Integer Source #

Prism into an `Integer` over a `Value`, `Primitive` or `Scientific`

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

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

    >>> "42" ^? _Integer
    Just 42

Instances

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

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

Access Integer `Value`s as Integrals.

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

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

nonNull :: Prism' Value Value Source #

Prism 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

# Primitive

data Primitive Source #

Primitives of `Value`

Constructors

StringPrim !Text |
NumberPrim !Scientific |
BoolPrim !Bool |
NullPrim |

Instances

Eq Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods (==) :: Primitive -> Primitive -> Bool Source # (/=) :: Primitive -> Primitive -> Bool Source #
Data Primitive Source # |

Instance details

Defined in Data.Aeson.Lens

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Primitive -> c Primitive Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Primitive Source #

toConstr :: Primitive -> Constr Source #

dataTypeOf :: Primitive -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Primitive) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Primitive) Source #

gmapT :: (forall b. Data b => b -> b) -> Primitive -> Primitive Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Primitive -> r Source #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Primitive -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> Primitive -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Primitive -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive Source #

Ord Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods compare :: Primitive -> Primitive -> Ordering Source # (<) :: Primitive -> Primitive -> Bool Source # (<=) :: Primitive -> Primitive -> Bool Source # (>) :: Primitive -> Primitive -> Bool Source # (>=) :: Primitive -> Primitive -> Bool Source # max :: Primitive -> Primitive -> Primitive Source # min :: Primitive -> Primitive -> Primitive Source #
Show Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods showsPrec :: Int -> Primitive -> ShowS Source # show :: Primitive -> String Source # showList :: [Primitive] -> ShowS Source #
AsPrimitive Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' Primitive Primitive Source # _String :: Prism' Primitive Text Source # _Bool :: Prism' Primitive Bool Source # _Null :: Prism' Primitive () Source #
AsNumber Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods _Number :: Prism' Primitive Scientific Source # _Double :: Prism' Primitive Double Source # _Integer :: Prism' Primitive Integer Source #

class AsNumber t => AsPrimitive t where Source #

Minimal complete definition

Nothing

Methods

_Primitive :: Prism' t Primitive Source #

    >>> "[1, \"x\", null, true, false]" ^? nth 0 . _Primitive
    Just (NumberPrim 1.0)

    >>> "[1, \"x\", null, true, false]" ^? nth 1 . _Primitive
    Just (StringPrim "x")

    >>> "[1, \"x\", null, true, false]" ^? nth 2 . _Primitive
    Just NullPrim

    >>> "[1, \"x\", null, true, false]" ^? nth 3 . _Primitive
    Just (BoolPrim True)

    >>> "[1, \"x\", null, true, false]" ^? nth 4 . _Primitive
    Just (BoolPrim False)

_Primitive :: AsValue t => Prism' t Primitive Source #

    >>> "[1, \"x\", null, true, false]" ^? nth 0 . _Primitive
    Just (NumberPrim 1.0)

    >>> "[1, \"x\", null, true, false]" ^? nth 1 . _Primitive
    Just (StringPrim "x")

    >>> "[1, \"x\", null, true, false]" ^? nth 2 . _Primitive
    Just NullPrim

    >>> "[1, \"x\", null, true, false]" ^? nth 3 . _Primitive
    Just (BoolPrim True)

    >>> "[1, \"x\", null, true, false]" ^? nth 4 . _Primitive
    Just (BoolPrim False)

_String :: Prism' t Text Source #

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

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

    >>> _Object._Wrapped # [("key" :: Text, _String # "value")] :: String
    "{\"key\":\"value\"}"

_Bool :: Prism' t Bool Source #

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

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

    >>> _Bool # True :: String
    "true"

    >>> _Bool # False :: String
    "false"

_Null :: Prism' t () Source #

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

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

    >>> _Null # () :: String
    "null"

Instances

AsPrimitive ByteString Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' ByteString Primitive Source # _String :: Prism' ByteString Text Source # _Bool :: Prism' ByteString Bool Source # _Null :: Prism' ByteString () Source #
AsPrimitive ByteString Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' ByteString Primitive Source # _String :: Prism' ByteString Text Source # _Bool :: Prism' ByteString Bool Source # _Null :: Prism' ByteString () Source #
AsPrimitive Text Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' Text Primitive Source # _String :: Prism' Text Text Source # _Bool :: Prism' Text Bool Source # _Null :: Prism' Text () Source #
AsPrimitive Value Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' Value Primitive Source # _String :: Prism' Value Text Source # _Bool :: Prism' Value Bool Source # _Null :: Prism' Value () Source #
AsPrimitive Text Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' Text Primitive Source # _String :: Prism' Text Text0 Source # _Bool :: Prism' Text Bool Source # _Null :: Prism' Text () Source #
AsPrimitive String Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' String Primitive Source # _String :: Prism' String Text Source # _Bool :: Prism' String Bool Source # _Null :: Prism' String () Source #
AsPrimitive Primitive Source # |
Instance details Defined in Data.Aeson.Lens Methods _Primitive :: Prism' Primitive Primitive Source # _String :: Prism' Primitive Text Source # _Bool :: Prism' Primitive Bool Source # _Null :: Prism' Primitive () Source #

# Objects and Arrays

class AsPrimitive t => AsValue t where Source #

Minimal complete definition

_Value

Methods

_Value :: Prism' t Value Source #

    >>> preview _Value "[1,2,3]" == Just (Array (Vector.fromList [Number 1.0,Number 2.0,Number 3.0]))
    True

_Object :: Prism' t (HashMap Text Value) Source #

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

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

    >>> _Object._Wrapped # [("key" :: Text, _String # "value")] :: String
    "{\"key\":\"value\"}"

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

    >>> preview _Array "[1,2,3]" == Just (Vector.fromList [Number 1.0,Number 2.0,Number 3.0])
    True

Instances

AsValue ByteString Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' ByteString Value Source # _Object :: Prism' ByteString (HashMap Text Value) Source # _Array :: Prism' ByteString (Vector Value) Source #
AsValue ByteString Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' ByteString Value Source # _Object :: Prism' ByteString (HashMap Text Value) Source # _Array :: Prism' ByteString (Vector Value) Source #
AsValue Text Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' Text Value Source # _Object :: Prism' Text (HashMap Text Value) Source # _Array :: Prism' Text (Vector Value) Source #
AsValue Value Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' Value Value Source # _Object :: Prism' Value (HashMap Text Value) Source # _Array :: Prism' Value (Vector Value) Source #
AsValue Text Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' Text Value Source # _Object :: Prism' Text (HashMap Text0 Value) Source # _Array :: Prism' Text (Vector Value) Source #
AsValue String Source # |
Instance details Defined in Data.Aeson.Lens Methods _Value :: Prism' String Value Source # _Object :: Prism' String (HashMap Text Value) Source # _Array :: Prism' String (Vector Value) Source #

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

Like `ix`, but for `Value` with Text 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 => IndexedTraversal' Text t Value Source #

An indexed Traversal into Object properties

    >>> Data.List.sort ("{\"a\": 4, \"b\": 7}" ^@.. members . _Number)
    [("a",4.0),("b",7.0)]

    >>> "{\"a\": 4}" & members . _Number *~ 10
    "{\"a\":40}"

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 => IndexedTraversal' Int t Value Source #

An indexed 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 #

Methods

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

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

Instances

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

# Orphan instances

Ixed Value Source # |
Instance details Methods ix :: Index Value -> Traversal' Value (IxValue Value) Source #
Plated Value Source # |
Instance details Methods plate :: Traversal' Value Value Source #