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

Copyright(c) Colin Woodbury 2015 - 2018 (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012
LicenseBSD3
MaintainerColin Woodbury <colingw@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Lens.Micro.Aeson

Contents

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

Numbers

class AsNumber t where #

Traverse into various number types.

Methods

_Number :: Traversal' t Scientific #

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

_Number :: AsPrimitive t => Traversal' t Scientific #

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

_Double :: Traversal' t Double #

Traversal into an Double over a Value, Primitive or Scientific

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

_Integer :: Traversal' t Integer #

Traversal 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 # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber ByteString # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Scientific # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber String # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Text # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Value # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Text # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Primitive # 
Instance details

Defined in Lens.Micro.Aeson

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

Access Integer Values as Integrals.

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

nonNull :: Traversal' Value Value #

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

Primitive

data Primitive #

Primitives of Value

Instances
Eq Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Ord Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Show Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Generic Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Associated Types

type Rep Primitive :: * -> * #

Hashable Primitive # 
Instance details

Defined in Lens.Micro.Aeson

NFData Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Methods

rnf :: Primitive -> () #

AsPrimitive Primitive # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Primitive # 
Instance details

Defined in Lens.Micro.Aeson

type Rep Primitive # 
Instance details

Defined in Lens.Micro.Aeson

class AsNumber t => AsPrimitive t where #

Traverse into various JSON primitives.

Methods

_Primitive :: Traversal' t Primitive #

>>> "[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 => Traversal' t Primitive #

>>> "[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 :: Traversal' t Text #

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

_Bool :: Traversal' t Bool #

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

_Null :: Traversal' t () #

>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
Just ()
>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
Nothing
Instances
AsPrimitive ByteString # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive ByteString # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive String # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive Text # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive Value # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive Text # 
Instance details

Defined in Lens.Micro.Aeson

AsPrimitive Primitive # 
Instance details

Defined in Lens.Micro.Aeson

Objects and Arrays

class AsPrimitive t => AsValue t where #

Traverse into JSON Objects and Arrays.

Minimal complete definition

_Value

Methods

_Value :: Traversal' t Value #

Traverse into data that encodes a Value

_Object :: Traversal' t (HashMap Text Value) #

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

_Array :: Traversal' t (Vector Value) #

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

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.0)
>>> "[1,2,3]" ^? key "a"
Nothing

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

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 #

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 #

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 #

Traverse into actual encoded JSON.

Minimal complete definition

_JSON

Methods

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

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

Instances
AsJSON ByteString # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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

AsJSON ByteString # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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

AsJSON String # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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

AsJSON Text # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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

AsJSON Value # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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

AsJSON Text # 
Instance details

Defined in Lens.Micro.Aeson

Methods

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