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

Portabilitynon-portable
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellTrustworthy

Control.Lens.Aeson

Contents

Description

 

Synopsis

Numbers

class AsNumber t whereSource

Methods

_Number :: Prism' t NumberSource

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

_Double :: Prism' t DoubleSource

Prism into an Double over a Value, Primitive or Number

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

_Integer :: Prism' t IntegerSource

Prism into an Integer over a Value, Primitive or Number

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

integralValue :: (AsNumber t, Integral a) => Prism' t aSource

Access Integer Values as Integrals.

defined as `integer . integral'

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

nonNull :: Prism' Value ValueSource

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

class AsNumber t => AsPrimitive t whereSource

Methods

_Primitive :: Prism' t PrimitiveSource

>>> "[1, \"x\", null, true, false]" ^? nth 0 . _Primitive
Just (NumberPrim 1)
>>> "[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 TextSource

_Bool :: Prism' t BoolSource

_Null :: Prism' t ()Source

Objects and Arrays

class AsPrimitive t => AsValue t whereSource

Methods

_Value :: Prism' t ValueSource

>>> "[1,2,3]" ^? _Value
Just (Array (fromList [Number 1,Number 2,Number 3]))

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

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

_Array :: Prism' t (Vector Value)Source

>>> "[1,2,3]" ^? _Array
Just (fromList [Number 1,Number 2,Number 3])

key :: AsValue t => Text -> Traversal' t ValueSource

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

>>> "{\"a\": 100, \"b\": 200}" ^? key "a"
Just (Number 100)
>>> "[1,2,3]" ^? key "a"
Nothing

nth :: AsValue t => Int -> Traversal' t ValueSource

Like ix, but for Arrays with Int indexes

>>> "[1,2,3]" ^? nth 1
Just (Number 2)
>>> "\"a\": 100, \"b\": 200}" ^? nth 1
Nothing
>>> "[1,2,3]" & nth 1 .~ (Number 20)
"[1,20,3]"

Decoding

class AsJSON t whereSource

Methods

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

A Prism into Value on lazy ByteStrings.