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

Copyright (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012 BSD3 Edward Kmett experimental non-portable Trustworthy Haskell98

Data.Aeson.Lens

Description

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

Synopsis

# Numbers

class AsNumber t where Source #

Methods

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

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

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

 Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # 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


# Primitive

data Primitive Source #

Primitives of Value

Constructors

 StringPrim !Text NumberPrim !Scientific BoolPrim !Bool NullPrim

Instances

 Source # Methods Source # Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Primitive -> c Primitive #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Primitive #dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Primitive) #dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Primitive) #gmapT :: (forall b. Data b => b -> b) -> Primitive -> Primitive #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Primitive -> r #gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Primitive -> r #gmapQ :: (forall d. Data d => d -> u) -> Primitive -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Primitive -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Primitive -> m Primitive # Source # Methods Source # MethodsshowList :: [Primitive] -> ShowS # Source # Methods Source # Methods

class AsNumber t => AsPrimitive t where Source #

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)

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

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

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

 Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods

# Objects and Arrays

class AsPrimitive t => AsValue t where Source #

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._Wrapped # [("key" :: Text, _String # "value")] :: String
"{\"key\":\"value\"}"

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


Instances

 Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods Source # Methods

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

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


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

 Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' ByteString a Source # Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' ByteString a Source # Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' String a Source # Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' Text a Source # Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' Value a Source # Source # Methods_JSON :: (FromJSON a, ToJSON a) => Prism' Text a Source #

# Orphan instances

 Source # Methods Source # Methods