aeson-optics-1.2.0.1: Law-abiding optics for aeson
Copyright (c) Oleg Grenrus 2019 (c) Edward Kmett 2013-2019 (c) Paul Wilson 2012 MIT Edward Kmett experimental non-portable Trustworthy Haskell2010

Data.Aeson.Optics

Description

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

Synopsis

# Numbers

class AsNumber t where Source #

Minimal complete definition

Nothing

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

>>> "42" ^? _Integer
Just 42


#### Instances

Instances details
 Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods

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

Access Integer Values 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


# Objects and Arrays

class AsNumber t => AsValue t where Source #

Minimal complete definition

_Value

Methods

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

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

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

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

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

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

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

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

>>> "{\"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

Instances details
 Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods

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

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

>>> "{\"a\": 4}" & members % _Number %~ (*10)
"{\"a\":40}"


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


class IsKey t where Source #

Methods

_Key is an Iso from something to a Key. This is primarily intended for situations where one wishes to use object keys that are not string literals and therefore must be converted:

>>> let k = "a" :: Text
>>> "{\"a\": 100, \"b\": 200}" ^? key (k ^. _Key)
Just (Number 100.0)


Note that applying _Key directly to a string literal (e.g., "a" ^. _Key) will likely not typecheck when OverloadedStrings is enabled.

#### Instances

Instances details
 Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods Source # Instance detailsDefined in Data.Aeson.Optics Methods

# Decoding

class AsJSON t where Source #

Methods

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

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

#### Instances

Instances details
 Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism String String a b Source # Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b Source # Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b Source # Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism Text Text a b Source # Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism Value Value a b Source # Source # Instance detailsDefined in Data.Aeson.Optics Methods_JSON :: (FromJSON a, ToJSON b) => Prism Text Text a b Source #

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

# Pattern Synonyms

pattern JSON :: (FromJSON a, ToJSON a, AsJSON t) => a -> t Source #

pattern Value_ :: (FromJSON a, ToJSON a) => a -> Value Source #

pattern Number_ :: AsNumber t => Scientific -> t Source #

pattern Double :: AsNumber t => Double -> t Source #

pattern Integer :: AsNumber t => Integer -> t Source #

pattern Integral :: (AsNumber t, Integral a) => a -> t Source #

pattern Bool_ :: AsValue t => Bool -> t Source #

pattern String_ :: AsValue t => Text -> t Source #

pattern Null_ :: AsValue t => t Source #

pattern Key_ :: IsKey t => Key -> t Source #

# Orphan instances

 Source # Instance details Associated Typestype IxKind Value # Methods Each Key (KeyMap a) (KeyMap b) a b Source # Instance details Methodseach :: IxTraversal Key (KeyMap a) (KeyMap b) a b # Ixed (KeyMap v) Source # Instance details Associated Typestype IxKind (KeyMap v) # Methodsix :: Index (KeyMap v) -> Optic' (IxKind (KeyMap v)) NoIx (KeyMap v) (IxValue (KeyMap v)) # At (KeyMap v) Source # Instance details Methodsat :: Index (KeyMap v) -> Lens' (KeyMap v) (Maybe (IxValue (KeyMap v))) #