-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Law-abiding lenses for aeson
--   
--   Law-abiding lenses for aeson.
@package lens-aeson
@version 1.2.3

-- | This module also exports orphan Ixed Value and
--   Plated Value instances.
module Data.Aeson.Lens
class AsNumber t

-- | 
--   >>> "[1, \"x\"]" ^? nth 0 . _Number
--   Just 1.0
--   
--   
--   
--   >>> "[1, \"x\"]" ^? nth 1 . _Number
--   Nothing
--   
_Number :: AsNumber t => Prism' t Scientific

-- | 
--   >>> "[1, \"x\"]" ^? nth 0 . _Number
--   Just 1.0
--   
--   
--   
--   >>> "[1, \"x\"]" ^? nth 1 . _Number
--   Nothing
--   
_Number :: (AsNumber t, AsValue t) => Prism' t Scientific

-- | Prism into an Double over a Value or Scientific
--   
--   
--   >>> "[10.2]" ^? nth 0 . _Double
--   Just 10.2
--   
_Double :: AsNumber t => Prism' t Double

-- | 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
--   
_Integer :: AsNumber t => Prism' t Integer

-- | Access Integer Values as Integrals.
--   
--   
--   >>> "[10]" ^? nth 0 . _Integral
--   Just 10
--   
--   
--   
--   >>> "[10.5]" ^? nth 0 . _Integral
--   Just 10
--   
_Integral :: (AsNumber t, Integral a) => Prism' t a

-- | 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
--   
nonNull :: Prism' Value Value
class AsNumber t => AsValue t

-- | 
--   >>> preview _Value "[1,2,3]" == Just (Array (Vector.fromList [Number 1.0,Number 2.0,Number 3.0]))
--   True
--   
_Value :: AsValue t => Prism' t Value

-- | 
--   >>> "{\"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\"}"
--   
_String :: AsValue t => Prism' t Text

-- | 
--   >>> "{\"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"
--   
_Bool :: AsValue t => Prism' t Bool

-- | 
--   >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
--   Just ()
--   
--   
--   
--   >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
--   Nothing
--   
--   
--   
--   >>> _Null # () :: String
--   "null"
--   
_Null :: AsValue t => Prism' t ()

-- | 
--   >>> "{\"a\": {}, \"b\": null}" ^? key "a" . _Object
--   Just (fromList [])
--   
--   
--   
--   >>> "{\"a\": {}, \"b\": null}" ^? key "b" . _Object
--   Nothing
--   
--   
--   
--   >>> _Object._Wrapped # [("key" :: Key, _String # "value")] :: String
--   "{\"key\":\"value\"}"
--   
_Object :: AsValue t => Prism' t (KeyMap Value)

-- | 
--   >>> preview _Array "[1,2,3]" == Just (Vector.fromList [Number 1.0,Number 2.0,Number 3.0])
--   True
--   
_Array :: AsValue t => Prism' t (Vector Value)

-- | Like ix, but for Object with Key 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
--   
key :: AsValue t => Key -> Traversal' t Value

-- | Like key, but uses at instead of ix. This is
--   handy when adding and removing object keys:
--   
--   
--   >>> "{\"a\": 100, \"b\": 200}" & atKey "a" .~ Nothing
--   "{\"b\":200}"
--   
--   
--   
--   >>> "{\"a\": 100, \"b\": 200}" & atKey "c" ?~ String "300"
--   "{\"a\":100,\"b\":200,\"c\":\"300\"}"
--   
atKey :: AsValue t => Key -> Traversal' t (Maybe Value)

-- | 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}"
--   
members :: AsValue t => IndexedTraversal' Key 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]"
--   
nth :: AsValue t => Int -> Traversal' t Value

-- | 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]"
--   
values :: AsValue t => IndexedTraversal' Int t Value
class IsKey t

-- | _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" ^. _Key) will likely not typecheck when
--   OverloadedStrings is enabled.
_Key :: IsKey t => Iso' t Key
class AsJSON t

-- | _JSON is a ReifiedPrism from something containing JSON
--   to something encoded in that structure
_JSON :: (AsJSON t, FromJSON a, ToJSON b) => Prism t t a b
_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
instance Data.Aeson.Lens.AsValue Data.ByteString.Internal.Type.ByteString
instance Data.Aeson.Lens.AsValue Data.ByteString.Lazy.Internal.ByteString
instance Data.Aeson.Lens.AsValue GHC.Base.String
instance Data.Aeson.Lens.AsValue Data.Text.Internal.Text
instance Data.Aeson.Lens.AsValue Data.Text.Internal.Lazy.Text
instance Data.Aeson.Lens.AsJSON Data.ByteString.Internal.Type.ByteString
instance Data.Aeson.Lens.AsJSON Data.ByteString.Lazy.Internal.ByteString
instance Data.Aeson.Lens.AsJSON GHC.Base.String
instance Data.Aeson.Lens.AsJSON Data.Text.Internal.Text
instance Data.Aeson.Lens.AsJSON Data.Text.Internal.Lazy.Text
instance Data.Aeson.Lens.AsJSON Data.Aeson.Types.Internal.Value
instance Data.Aeson.Lens.IsKey Data.Aeson.Key.Key
instance Data.Aeson.Lens.IsKey GHC.Base.String
instance Data.Aeson.Lens.IsKey Data.Text.Internal.Text
instance Data.Aeson.Lens.IsKey Data.Text.Internal.Lazy.Text
instance Data.Aeson.Lens.IsKey Data.Text.Short.Internal.ShortText
instance Data.Aeson.Lens.IsKey Data.ByteString.Internal.Type.ByteString
instance Data.Aeson.Lens.IsKey Data.ByteString.Lazy.Internal.ByteString
instance Data.Aeson.Lens.AsNumber Data.Aeson.Types.Internal.Value
instance Data.Aeson.Lens.AsNumber Data.Scientific.Scientific
instance Data.Aeson.Lens.AsNumber Data.ByteString.Internal.Type.ByteString
instance Data.Aeson.Lens.AsNumber Data.ByteString.Lazy.Internal.ByteString
instance Data.Aeson.Lens.AsNumber Data.Text.Internal.Text
instance Data.Aeson.Lens.AsNumber Data.Text.Internal.Lazy.Text
instance Data.Aeson.Lens.AsNumber GHC.Base.String
instance Data.Aeson.Lens.AsValue Data.Aeson.Types.Internal.Value
instance Control.Lens.At.Ixed Data.Aeson.Types.Internal.Value
instance Control.Lens.Plated.Plated Data.Aeson.Types.Internal.Value
instance Control.Lens.At.Ixed (Data.Aeson.KeyMap.KeyMap v)
instance Control.Lens.At.At (Data.Aeson.KeyMap.KeyMap v)
instance Control.Lens.Each.Each (Data.Aeson.KeyMap.KeyMap a) (Data.Aeson.KeyMap.KeyMap b) a b
instance (t GHC.Types.~ Data.Aeson.KeyMap.KeyMap v') => Control.Lens.Wrapped.Rewrapped (Data.Aeson.KeyMap.KeyMap v) t
instance Control.Lens.Wrapped.Wrapped (Data.Aeson.KeyMap.KeyMap v)
