-- 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.0.2

-- | This module also exports orphan Ixed Value and
--   Plated Value instances.
module Data.Aeson.Lens
class AsNumber t where _Number = _Primitive . _Number _Double = _Number . iso toRealFloat realToFrac _Integer = _Number . iso floor fromIntegral

-- | 
--   >>> "[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, AsPrimitive t) => Prism' t Scientific

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

-- | 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
--   
_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

-- | Primitives of Value
data Primitive
StringPrim :: !Text -> Primitive
NumberPrim :: !Scientific -> Primitive
BoolPrim :: !Bool -> Primitive
NullPrim :: Primitive
class AsNumber t => AsPrimitive t where _Primitive = _Value . _Primitive _String = _Primitive . prism StringPrim (\ v -> case v of { StringPrim s -> Right s _ -> Left v }) _Bool = _Primitive . prism BoolPrim (\ v -> case v of { BoolPrim b -> Right b _ -> Left v }) _Null = _Primitive . prism (const NullPrim) (\ v -> case v of { NullPrim -> Right () _ -> Left v })

-- | 
--   >>> "[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)
--   
_Primitive :: AsPrimitive t => Prism' t Primitive

-- | 
--   >>> "[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)
--   
_Primitive :: (AsPrimitive t, AsValue t) => Prism' t Primitive

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

-- | 
--   >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
--   Just ()
--   
--   
--   
--   >>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
--   Nothing
--   
--   
--   
--   >>> _Null # () :: String
--   "null"
--   
_Null :: AsPrimitive t => Prism' t ()
class AsPrimitive t => AsValue t where _Object = _Value . prism Object (\ v -> case v of { Object o -> Right o _ -> Left v }) _Array = _Value . prism Array (\ v -> case v of { Array a -> Right a _ -> Left v })

-- | 
--   >>> 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\": {}, \"b\": null}" ^? key "a" . _Object
--   Just (fromList [])
--   
--   
--   
--   >>> "{\"a\": {}, \"b\": null}" ^? key "b" . _Object
--   Nothing
--   
--   
--   
--   >>> _Object._Wrapped # [("key" :: Text, _String # "value")] :: String
--   "{\"key\":\"value\"}"
--   
_Object :: AsValue t => Prism' t (HashMap Text 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 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
--   
key :: AsValue t => Text -> Traversal' t Value

-- | 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}"
--   
members :: AsValue t => IndexedTraversal' Text 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 AsJSON t

-- | _JSON is a Prism from something containing JSON to
--   something encoded in that structure
_JSON :: (AsJSON t, FromJSON a, ToJSON a) => Prism' t a
instance Data.Data.Data Data.Aeson.Lens.Primitive
instance GHC.Show.Show Data.Aeson.Lens.Primitive
instance GHC.Classes.Ord Data.Aeson.Lens.Primitive
instance GHC.Classes.Eq Data.Aeson.Lens.Primitive
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.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.AsNumber Data.Aeson.Lens.Primitive
instance Data.Aeson.Lens.AsPrimitive Data.Aeson.Types.Internal.Value
instance Data.Aeson.Lens.AsPrimitive Data.ByteString.Internal.ByteString
instance Data.Aeson.Lens.AsPrimitive Data.ByteString.Lazy.Internal.ByteString
instance Data.Aeson.Lens.AsPrimitive Data.Text.Internal.Text
instance Data.Aeson.Lens.AsPrimitive Data.Text.Internal.Lazy.Text
instance Data.Aeson.Lens.AsPrimitive GHC.Base.String
instance Data.Aeson.Lens.AsPrimitive Data.Aeson.Lens.Primitive
instance Data.Aeson.Lens.AsValue Data.Aeson.Types.Internal.Value
instance Data.Aeson.Lens.AsValue Data.ByteString.Internal.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.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 Control.Lens.At.Ixed Data.Aeson.Types.Internal.Value
instance Control.Lens.Plated.Plated Data.Aeson.Types.Internal.Value
