lens-4.1.2: Lenses, Folds and Traversals

Portability non-portable experimental Edward Kmett Trustworthy

Data.Aeson.Lens

Contents

Description

Synopsis

# Numbers

class AsNumber t whereSource

Methods

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

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

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

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

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

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

Access Integer `Value`s as Integrals.

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

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

class AsNumber t => AsPrimitive t whereSource

Methods

````>>> ````"[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)
```

_Null :: Prism' t ()Source

# Objects and Arrays

class AsPrimitive t => AsValue t whereSource

Methods

````>>> ````"[1,2,3]" ^? _Value
```Just (Array (fromList [Number 1.0,Number 2.0,Number 3.0]))
```
````>>> ````"{\"a\": {}, \"b\": null}" ^? key "a" . _Object
```Just fromList []
```
````>>> ````"{\"a\": {}, \"b\": null}" ^? key "b" . _Object
```Nothing
```
````>>> ````"[1,2,3]" ^? _Array
```Just (fromList [Number 1.0,Number 2.0,Number 3.0])
```

Instances

 AsValue String AsValue ByteString AsValue Value

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

An indexed Traversal into Object properties

````>>> ````"{\"a\": 4, \"b\": 7}" ^@.. members
```[("a",Number 4.0),("b",Number 7.0)]
```
````>>> ````"{\"a\": 4, \"b\": 7}" & members . _Number *~ 10
```"{\"a\":40,\"b\":70}"
```

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

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]"
```

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 whereSource

Methods

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

A Prism into `Value` on lazy `ByteString`s.

Instances

 AsJSON String AsJSON ByteString AsJSON Value