Copyright | (c) Edward Kmett 2013-2019 (c) Paul Wilson 2012 |
---|---|
License | BSD3 |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Synopsis
- class AsNumber t where
- _Integral :: (AsNumber t, Integral a) => Prism' t a
- nonNull :: Prism' Value Value
- class AsNumber t => AsValue t where
- key :: AsValue t => Key -> Traversal' t Value
- atKey :: AsValue t => Key -> Traversal' t (Maybe Value)
- members :: AsValue t => IndexedTraversal' Key t Value
- nth :: AsValue t => Int -> Traversal' t Value
- values :: AsValue t => IndexedTraversal' Int t Value
- class IsKey t where
- class AsJSON t where
- _JSON' :: (AsJSON t, FromJSON a, ToJSON a) => Prism' t a
- pattern JSON :: (FromJSON a, ToJSON a, AsJSON t) => a -> t
- pattern Value_ :: (FromJSON a, ToJSON a) => a -> Value
- pattern Number_ :: AsNumber t => Scientific -> t
- pattern Double :: AsNumber t => Double -> t
- pattern Integer :: AsNumber t => Integer -> t
- pattern Integral :: (AsNumber t, Integral a) => a -> t
- pattern Bool_ :: AsValue t => Bool -> t
- pattern String_ :: AsValue t => Text -> t
- pattern Null_ :: AsValue t => t
- pattern Key_ :: IsKey t => Key -> t
Numbers
class AsNumber t where Source #
Nothing
_Number :: Prism' t Scientific Source #
>>>
"[1, \"x\"]" ^? nth 0 . _Number
Just 1.0
>>>
"[1, \"x\"]" ^? nth 1 . _Number
Nothing
_Double :: Prism' t Double Source #
Prism into an Double
over a Value
or Scientific
>>>
"[10.2]" ^? nth 0 . _Double
Just 10.2
_Integer :: Prism' t Integer Source #
Prism into an Integer
over a Value
or Scientific
>>>
"[10]" ^? nth 0 . _Integer
Just 10
>>>
"[10.5]" ^? nth 0 . _Integer
Just 10
>>>
"42" ^? _Integer
Just 42
_Integral :: (AsNumber t, Integral a) => Prism' t a Source #
Access Integer Value
s as Integrals.
>>>
"[10]" ^? nth 0 . _Integral
Just 10
>>>
"[10.5]" ^? nth 0 . _Integral
Just 10
nonNull :: Prism' Value Value Source #
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 #
_Value :: Prism' t Value Source #
>>>
preview _Value "[1,2,3]" == Just (Array (Vector.fromList [Number 1.0,Number 2.0,Number 3.0]))
True
_String :: Prism' t Text Source #
>>>
"{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _String
Just "xyz"
>>>
"{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _String
Nothing
>>>
_Object._Wrapped # [("key" :: Key, _String # "value")] :: String
"{\"key\":\"value\"}"
_Bool :: Prism' t Bool Source #
>>>
"{\"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"
>>>
"{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
Just ()
>>>
"{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
Nothing
>>>
_Null # () :: String
"null"
_Object :: Prism' t (KeyMap Value) Source #
>>>
"{\"a\": {}, \"b\": null}" ^? key "a" . _Object
Just (fromList [])
>>>
"{\"a\": {}, \"b\": null}" ^? key "b" . _Object
Nothing
>>>
_Object._Wrapped # [("key" :: Key, _String # "value")] :: String
"{\"key\":\"value\"}"
_Array :: Prism' t (Vector Value) Source #
>>>
preview _Array "[1,2,3]" == Just (Vector.fromList [Number 1.0,Number 2.0,Number 3.0])
True
members :: AsValue t => IndexedTraversal' Key t Value Source #
An indexed Traversal into Object properties
>>>
Data.List.sort ("{\"a\": 4, \"b\": 7}" ^@.. members . _Number)
[("a",4.0),("b",7.0)]
>>>
"{\"a\": 4}" & members . _Number *~ 10
"{\"a\":40}"
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]"
values :: AsValue t => IndexedTraversal' Int t Value Source #
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]"
_Key
is an ReifiedIso
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" ^.
) will likely not typecheck when
_Key
OverloadedStrings
is enabled.
Instances
IsKey Key Source # | |
IsKey ByteString Source # | This instance assumes that you are dealing with UTF-8–encoded
|
Defined in Data.Aeson.Lens | |
IsKey ByteString Source # | This instance assumes that you are dealing with UTF-8–encoded
|
Defined in Data.Aeson.Lens | |
IsKey Text Source # | |
IsKey Text Source # | |
IsKey ShortText Source # | |
IsKey String Source # | |
Decoding
_JSON :: (FromJSON a, ToJSON b) => Prism t t a b Source #
_JSON
is a ReifiedPrism
from something containing JSON to something encoded in that structure
Instances
AsJSON Value Source # | |
AsJSON ByteString Source # | |
Defined in Data.Aeson.Lens _JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b Source # | |
AsJSON ByteString Source # | |
Defined in Data.Aeson.Lens _JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b Source # | |
AsJSON Text Source # | |
AsJSON Text Source # | |
AsJSON String Source # | |
Pattern Synonyms
pattern Number_ :: AsNumber t => Scientific -> t Source #