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


-- | Law-abiding lenses for Aeson, using microlens
--   
--   Law-abiding lenses for Aeson, using microlens.
@package microlens-aeson
@version 2.5.1


-- | Traversals for Data.Aeson, based on microlens for minimal
--   dependencies.
--   
--   For basic manipulation of Aeson values, full <tt>Prism</tt>
--   functionality isn't necessary. Since all Prisms are inherently
--   Traversals, we provide Traversals that mimic the behaviour of the
--   Prisms found in the original Data.Aeson.Lens.
module Lens.Micro.Aeson

-- | Traverse into various number types.
class AsNumber t

-- | <pre>
--   &gt;&gt;&gt; "[1, \"x\"]" ^? nth 0 . _Number
--   Just 1.0
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[1, \"x\"]" ^? nth 1 . _Number
--   Nothing
--   </pre>
_Number :: AsNumber t => Traversal' t Scientific

-- | <pre>
--   &gt;&gt;&gt; "[1, \"x\"]" ^? nth 0 . _Number
--   Just 1.0
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[1, \"x\"]" ^? nth 1 . _Number
--   Nothing
--   </pre>
_Number :: (AsNumber t, AsValue t) => Traversal' t Scientific

-- | Traversal into an <a>Double</a> over a <a>Value</a> or
--   <a>Scientific</a>
--   
--   <pre>
--   &gt;&gt;&gt; "[10.2]" ^? nth 0 . _Double
--   Just 10.2
--   </pre>
_Double :: AsNumber t => Traversal' t Double

-- | Traversal into an <a>Integer</a> over a <a>Value</a> or
--   <a>Scientific</a>
--   
--   <pre>
--   &gt;&gt;&gt; "[10]" ^? nth 0 . _Integer
--   Just 10
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[10.5]" ^? nth 0 . _Integer
--   Just 10
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "42" ^? _Integer
--   Just 42
--   </pre>
_Integer :: AsNumber t => Traversal' t Integer

-- | Access Integer <a>Value</a>s as Integrals.
--   
--   <pre>
--   &gt;&gt;&gt; "[10]" ^? nth 0 . _Integral
--   Just 10
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[10.5]" ^? nth 0 . _Integral
--   Just 10
--   </pre>
_Integral :: (AsNumber t, Integral a) => Traversal' t a

-- | Traversal into non-<a>Null</a> values
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . nonNull
--   Just (String "xyz")
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": {}, \"b\": null}" ^? key "a" . nonNull
--   Just (Object (fromList []))
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . nonNull
--   Nothing
--   </pre>
nonNull :: Traversal' Value Value

-- | Traverse into JSON Objects and Arrays.
class AsNumber t => AsValue t

-- | Traverse into data that encodes a <a>Value</a>
_Value :: AsValue t => Traversal' t Value

-- | <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _String
--   Just "xyz"
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _String
--   Nothing
--   </pre>
_String :: AsValue t => Traversal' t Text

-- | <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _Bool
--   Just True
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _Bool
--   Nothing
--   </pre>
_Bool :: AsValue t => Traversal' t Bool

-- | <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
--   Just ()
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
--   Nothing
--   </pre>
_Null :: AsValue t => Traversal' t ()

-- | <pre>
--   &gt;&gt;&gt; "{\"a\": {}, \"b\": null}" ^? key "a" . _Object
--   Just (fromList [])
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": {}, \"b\": null}" ^? key "b" . _Object
--   Nothing
--   </pre>
_Object :: AsValue t => Traversal' t (KeyMap Value)
_Array :: AsValue t => Traversal' t (Vector Value)

-- | Like <a>ix</a>, but for <a>Object</a> with <a>Key</a> indices. This
--   often has better inference than <a>ix</a> when used with
--   OverloadedStrings.
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": 100, \"b\": 200}" ^? key "a"
--   Just (Number 100.0)
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[1,2,3]" ^? key "a"
--   Nothing
--   </pre>
key :: AsValue t => Key -> Traversal' t Value

-- | A Traversal into Object properties
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": 4, \"b\": 7}" ^.. members
--   [Number 4.0,Number 7.0]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": 4, \"b\": 7}" &amp; members . _Number %~ (* 10)
--   "{\"a\":40,\"b\":70}"
--   </pre>
members :: AsValue t => Traversal' t Value

-- | Like <a>ix</a>, but for Arrays with Int indexes
--   
--   <pre>
--   &gt;&gt;&gt; "[1,2,3]" ^? nth 1
--   Just (Number 2.0)
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "{\"a\": 100, \"b\": 200}" ^? nth 1
--   Nothing
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[1,2,3]" &amp; nth 1 .~ Number 20
--   "[1,20,3]"
--   </pre>
nth :: AsValue t => Int -> Traversal' t Value

-- | A Traversal into Array elements
--   
--   <pre>
--   &gt;&gt;&gt; "[1,2,3]" ^.. values
--   [Number 1.0,Number 2.0,Number 3.0]
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; "[1,2,3]" &amp; values . _Number %~ (* 10)
--   "[10,20,30]"
--   </pre>
values :: AsValue t => Traversal' t Value

-- | Traverse into actual encoded JSON.
class AsJSON t

-- | <a>_JSON</a> is a <a>Traversal</a> from something containing JSON to
--   something encoded in that structure.
_JSON :: (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
instance Lens.Micro.Aeson.AsValue Data.ByteString.Internal.Type.ByteString
instance Lens.Micro.Aeson.AsValue Data.ByteString.Lazy.Internal.ByteString
instance Lens.Micro.Aeson.AsValue GHC.Base.String
instance Lens.Micro.Aeson.AsValue Data.Text.Internal.Text
instance Lens.Micro.Aeson.AsValue Data.Text.Internal.Lazy.Text
instance Lens.Micro.Aeson.AsJSON Data.ByteString.Internal.Type.ByteString
instance Lens.Micro.Aeson.AsJSON Data.ByteString.Lazy.Internal.ByteString
instance Lens.Micro.Aeson.AsJSON GHC.Base.String
instance Lens.Micro.Aeson.AsJSON Data.Text.Internal.Text
instance Lens.Micro.Aeson.AsJSON Data.Text.Internal.Lazy.Text
instance Lens.Micro.Aeson.AsJSON Data.Aeson.Types.Internal.Value
instance Lens.Micro.Aeson.AsNumber Data.Aeson.Types.Internal.Value
instance Lens.Micro.Aeson.AsNumber Data.Scientific.Scientific
instance Lens.Micro.Aeson.AsNumber Data.ByteString.Internal.Type.ByteString
instance Lens.Micro.Aeson.AsNumber Data.ByteString.Lazy.Internal.ByteString
instance Lens.Micro.Aeson.AsNumber Data.Text.Internal.Text
instance Lens.Micro.Aeson.AsNumber Data.Text.Internal.Lazy.Text
instance Lens.Micro.Aeson.AsNumber GHC.Base.String
instance Lens.Micro.Aeson.AsValue Data.Aeson.Types.Internal.Value
