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


-- | Sustainable serialisation library
--   
--   Please see the README on Github at
--   <a>https://github.com/fumieval/winery#readme</a>
@package winery
@version 0.3.1

module Data.Winery.Internal.Builder
data Encoding
getSize :: Encoding -> Int
toByteString :: Encoding -> ByteString
hPutEncoding :: Handle -> Encoding -> IO ()
word8 :: Word8 -> Encoding
word16 :: Word16 -> Encoding
word32 :: Word32 -> Encoding
word64 :: Word64 -> Encoding
bytes :: ByteString -> Encoding
varInt :: (Bits a, Integral a) => a -> Encoding
unsignedVarInt :: (Bits a, Integral a) => a -> Encoding
instance GHC.Classes.Eq Data.Winery.Internal.Builder.Encoding
instance GHC.Classes.Eq Data.Winery.Internal.Builder.Tree
instance GHC.Show.Show Data.Winery.Internal.Builder.Encoding
instance Data.String.IsString Data.Winery.Internal.Builder.Encoding
instance GHC.Base.Semigroup Data.Winery.Internal.Builder.Encoding
instance GHC.Base.Monoid Data.Winery.Internal.Builder.Encoding

module Data.Winery.Internal
data Encoding
data EncodingMulti
encodeMulti :: (EncodingMulti -> EncodingMulti) -> Encoding
encodeItem :: Encoding -> EncodingMulti -> EncodingMulti
type Decoder = (->) ByteString
decodeAt :: (Int, Int) -> Decoder a -> Decoder a
decodeVarInt :: (Num a, Bits a) => ContT r Decoder a
type Offsets = Vector (Int, Int)
decodeOffsets :: Int -> ContT r Decoder Offsets
getWord8 :: ContT r Decoder Word8
data DecodeException
InsufficientInput :: DecodeException
InvalidTag :: DecodeException
word16be :: ByteString -> Word16
word32be :: ByteString -> Word32
word64be :: ByteString -> Word64
unsafeIndex :: String -> [a] -> Int -> a
unsafeIndexV :: Unbox a => String -> Vector a -> Int -> a
newtype Strategy a
Strategy :: ([Decoder Dynamic] -> Either StrategyError a) -> Strategy a
[unStrategy] :: Strategy a -> [Decoder Dynamic] -> Either StrategyError a
type StrategyError = Doc AnsiStyle
errorStrategy :: Doc AnsiStyle -> Strategy a
newtype TransFusion f g a
TransFusion :: (forall h. Applicative h => (forall x. f x -> h (g x)) -> h a) -> TransFusion f g a
[unTransFusion] :: TransFusion f g a -> forall h. Applicative h => (forall x. f x -> h (g x)) -> h a
instance GHC.Base.Functor Data.Winery.Internal.Strategy
instance GHC.Read.Read Data.Winery.Internal.DecodeException
instance GHC.Show.Show Data.Winery.Internal.DecodeException
instance GHC.Classes.Eq Data.Winery.Internal.DecodeException
instance GHC.Base.Functor (Data.Winery.Internal.TransFusion f g)
instance GHC.Base.Applicative (Data.Winery.Internal.TransFusion f g)
instance GHC.Base.Applicative Data.Winery.Internal.Strategy
instance GHC.Base.Monad Data.Winery.Internal.Strategy
instance GHC.Base.Alternative Data.Winery.Internal.Strategy
instance Control.Monad.Fix.MonadFix Data.Winery.Internal.Strategy
instance GHC.Exception.Type.Exception Data.Winery.Internal.DecodeException

module Data.Winery
data Schema

-- | binds a fixpoint
SFix :: Schema -> Schema

-- | <tt>SSelf n</tt> refers to the n-th innermost fixpoint
SSelf :: !Word8 -> Schema
SList :: !Schema -> Schema
SArray :: !VarInt Int -> !Schema -> Schema
SProduct :: [Schema] -> Schema
SProductFixed :: [(VarInt Int, Schema)] -> Schema
SRecord :: [(Text, Schema)] -> Schema
SVariant :: [(Text, [Schema])] -> Schema
SSchema :: !Word8 -> Schema
SUnit :: Schema
SBool :: Schema
SChar :: Schema
SWord8 :: Schema
SWord16 :: Schema
SWord32 :: Schema
SWord64 :: Schema
SInt8 :: Schema
SInt16 :: Schema
SInt32 :: Schema
SInt64 :: Schema
SInteger :: Schema
SFloat :: Schema
SDouble :: Schema
SBytes :: Schema
SText :: Schema
SUTCTime :: Schema

-- | Serialisable datatype
class Typeable a => Serialise a

-- | Obtain the schema of the datatype. <tt>[TypeRep]</tt> is for handling
--   recursion.
schemaVia :: Serialise a => Proxy a -> [TypeRep] -> Schema

-- | Serialise a value.
toEncoding :: Serialise a => a -> Encoding

-- | The <a>Deserialiser</a>
deserialiser :: Serialise a => Deserialiser a

-- | If this is <tt><a>Just</a> x</tt>, the size of <a>toEncoding</a> must
--   be <tt>x</tt>. <a>deserialiser</a> must not depend on this value.
constantSize :: Serialise a => Proxy a -> Maybe Int

-- | Obtain the schema of the datatype. <tt>[TypeRep]</tt> is for handling
--   recursion.
schemaVia :: (Serialise a, Generic a, GSerialiseVariant (Rep a)) => Proxy a -> [TypeRep] -> Schema

-- | Serialise a value.
toEncoding :: (Serialise a, Generic a, GSerialiseVariant (Rep a)) => a -> Encoding

-- | The <a>Deserialiser</a>
deserialiser :: (Serialise a, Generic a, GSerialiseVariant (Rep a)) => Deserialiser a
data DecodeException
InsufficientInput :: DecodeException
InvalidTag :: DecodeException

-- | Obtain the schema of the datatype.
schema :: forall proxy a. Serialise a => proxy a -> Schema
toEncodingWithSchema :: Serialise a => a -> Encoding

-- | Serialise a value along with its schema.
serialise :: Serialise a => a -> ByteString

-- | Deserialise a <a>serialise</a>d <a>Bytestring</a>.
deserialise :: Serialise a => ByteString -> Either StrategyError a

-- | Deserialise a <a>serialise</a>d <a>Bytestring</a>.
deserialiseBy :: Deserialiser a -> ByteString -> Either StrategyError a
splitSchema :: ByteString -> Either StrategyError (Schema, ByteString)

-- | Serialise a value along with its schema.
writeFileSerialise :: Serialise a => FilePath -> a -> IO ()

-- | <a>Deserialiser</a> is a <a>Plan</a> that creates a <a>Decoder</a>.
newtype Deserialiser a
Deserialiser :: Plan (Decoder a) -> Deserialiser a
[getDeserialiser] :: Deserialiser a -> Plan (Decoder a)
type Decoder = (->) ByteString

-- | Serialise a value without its schema.
serialiseOnly :: Serialise a => a -> ByteString

-- | Obtain a decoder from a schema.
getDecoder :: Serialise a => Schema -> Either StrategyError (Decoder a)

-- | Get a decoder from a <a>Deserialiser</a> and a schema.
getDecoderBy :: Deserialiser a -> Schema -> Either StrategyError (Decoder a)

-- | Decode a value with the current schema.
decodeCurrent :: forall a. Serialise a => Decoder a
data Encoding
encodeMulti :: (EncodingMulti -> EncodingMulti) -> Encoding
getSize :: Encoding -> Int
toByteString :: Encoding -> ByteString
hPutEncoding :: Handle -> Encoding -> IO ()
newtype Plan a
Plan :: (Schema -> Strategy a) -> Plan a
[unPlan] :: Plan a -> Schema -> Strategy a
extractArrayBy :: Deserialiser a -> Deserialiser (Int, Int -> a)

-- | Extract a list or an array of values.
extractListBy :: Deserialiser a -> Deserialiser [a]

-- | Extract a field of a record.
extractField :: Serialise a => Text -> Deserialiser a

-- | Extract a field using the supplied <a>Deserialiser</a>.
extractFieldBy :: Typeable a => Deserialiser a -> Text -> Deserialiser a
extractConstructor :: Serialise a => Text -> Deserialiser (Maybe a)

-- | Tries to extract a specific constructor of a variant. Useful for
--   implementing backward-compatible deserialisers.
extractConstructorBy :: Typeable a => Deserialiser a -> Text -> Deserialiser (Maybe a)

-- | Encoded in variable-length quantity.
newtype VarInt a
VarInt :: a -> VarInt a
[getVarInt] :: VarInt a -> a
unwrapDeserialiser :: Deserialiser a -> Schema -> Strategy (Decoder a)
data Strategy a
type StrategyError = Doc AnsiStyle
unexpectedSchema :: forall a. Serialise a => Doc AnsiStyle -> Schema -> Strategy (Decoder a)
unexpectedSchema' :: Doc AnsiStyle -> Doc AnsiStyle -> Schema -> Strategy a
class GSerialiseRecord f

-- | Generic implementation of <a>schemaVia</a> for a record.
gschemaViaRecord :: forall proxy a. (GSerialiseRecord (Rep a), Generic a, Typeable a) => proxy a -> [TypeRep] -> Schema
class GEncodeRecord f

-- | Generic implementation of <a>toEncoding</a> for a record.
gtoEncodingRecord :: (GEncodeRecord (Rep a), Generic a) => a -> Encoding

-- | Generic implementation of <a>deserialiser</a> for a record.
gdeserialiserRecord :: forall a. (GSerialiseRecord (Rep a), Generic a, Typeable a) => Maybe a -> Deserialiser a
class GSerialiseVariant f

-- | Generic implementation of <a>schemaVia</a> for an ADT.
gschemaViaVariant :: forall proxy a. (GSerialiseVariant (Rep a), Typeable a, Generic a) => proxy a -> [TypeRep] -> Schema

-- | Generic implementation of <a>toEncoding</a> for an ADT.
gtoEncodingVariant :: (GSerialiseVariant (Rep a), Generic a) => a -> Encoding

-- | Generic implementation of <a>deserialiser</a> for an ADT.
gdeserialiserVariant :: forall a. (GSerialiseVariant (Rep a), Generic a, Typeable a) => Deserialiser a
bootstrapSchema :: Word8 -> Either StrategyError Schema
instance GHC.Base.Functor Data.Winery.Deserialiser
instance GHC.Base.Functor Data.Winery.Plan
instance GHC.Generics.Generic Data.Winery.Schema
instance GHC.Classes.Eq Data.Winery.Schema
instance GHC.Read.Read Data.Winery.Schema
instance GHC.Show.Show Data.Winery.Schema
instance Data.Bits.Bits a => Data.Bits.Bits (Data.Winery.VarInt a)
instance GHC.Real.Integral a => GHC.Real.Integral (Data.Winery.VarInt a)
instance GHC.Real.Real a => GHC.Real.Real (Data.Winery.VarInt a)
instance GHC.Num.Num a => GHC.Num.Num (Data.Winery.VarInt a)
instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Data.Winery.VarInt a)
instance GHC.Enum.Enum a => GHC.Enum.Enum (Data.Winery.VarInt a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Winery.VarInt a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Winery.VarInt a)
instance GHC.Read.Read a => GHC.Read.Read (Data.Winery.VarInt a)
instance GHC.Show.Show a => GHC.Show.Show (Data.Winery.VarInt a)
instance Data.Winery.Serialise a => Data.Winery.Serialise (Data.Functor.Identity.Identity a)
instance (Data.Winery.Serialise a, Data.Typeable.Internal.Typeable b) => Data.Winery.Serialise (Data.Functor.Const.Const a b)
instance Data.Winery.Serialise Data.Winery.Schema
instance Data.Winery.Serialise ()
instance Data.Winery.Serialise GHC.Types.Bool
instance Data.Winery.Serialise GHC.Word.Word8
instance Data.Winery.Serialise GHC.Word.Word16
instance Data.Winery.Serialise GHC.Word.Word32
instance Data.Winery.Serialise GHC.Word.Word64
instance Data.Winery.Serialise GHC.Types.Word
instance Data.Winery.Serialise GHC.Int.Int8
instance Data.Winery.Serialise GHC.Int.Int16
instance Data.Winery.Serialise GHC.Int.Int32
instance Data.Winery.Serialise GHC.Int.Int64
instance Data.Winery.Serialise GHC.Types.Int
instance Data.Winery.Serialise GHC.Types.Float
instance Data.Winery.Serialise GHC.Types.Double
instance Data.Winery.Serialise Data.Text.Internal.Text
instance (Data.Typeable.Internal.Typeable a, Data.Bits.Bits a, GHC.Real.Integral a) => Data.Winery.Serialise (Data.Winery.VarInt a)
instance Data.Winery.Serialise GHC.Integer.Type.Integer
instance Data.Winery.Serialise GHC.Types.Char
instance Data.Winery.Serialise a => Data.Winery.Serialise (GHC.Maybe.Maybe a)
instance Data.Winery.Serialise Data.ByteString.Internal.ByteString
instance Data.Winery.Serialise Data.ByteString.Lazy.Internal.ByteString
instance Data.Winery.Serialise Data.Winery.Internal.Builder.Encoding
instance Data.Winery.Serialise Data.Time.Clock.Internal.UTCTime.UTCTime
instance Data.Winery.Serialise Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime
instance Data.Winery.Serialise a => Data.Winery.Serialise [a]
instance Data.Winery.Serialise a => Data.Winery.Serialise (Data.Vector.Vector a)
instance (Foreign.Storable.Storable a, Data.Winery.Serialise a) => Data.Winery.Serialise (Data.Vector.Storable.Vector a)
instance (Data.Vector.Unboxed.Base.Unbox a, Data.Winery.Serialise a) => Data.Winery.Serialise (Data.Vector.Unboxed.Base.Vector a)
instance (GHC.Classes.Ord k, Data.Winery.Serialise k, Data.Winery.Serialise v) => Data.Winery.Serialise (Data.Map.Internal.Map k v)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Data.Winery.Serialise k, Data.Winery.Serialise v) => Data.Winery.Serialise (Data.HashMap.Base.HashMap k v)
instance Data.Winery.Serialise v => Data.Winery.Serialise (Data.IntMap.Internal.IntMap v)
instance (GHC.Classes.Ord a, Data.Winery.Serialise a) => Data.Winery.Serialise (Data.Set.Internal.Set a)
instance Data.Winery.Serialise Data.IntSet.Internal.IntSet
instance Data.Winery.Serialise a => Data.Winery.Serialise (Data.Sequence.Internal.Seq a)
instance Data.Winery.Serialise Data.Scientific.Scientific
instance (Data.Winery.Serialise a, Data.Winery.Serialise b) => Data.Winery.Serialise (a, b)
instance (Data.Winery.Serialise a, Data.Winery.Serialise b, Data.Winery.Serialise c) => Data.Winery.Serialise (a, b, c)
instance (Data.Winery.Serialise a, Data.Winery.Serialise b, Data.Winery.Serialise c, Data.Winery.Serialise d) => Data.Winery.Serialise (a, b, c, d)
instance (Data.Winery.Serialise a, Data.Winery.Serialise b) => Data.Winery.Serialise (Data.Either.Either a b)
instance Data.Winery.Serialise a => Data.Winery.GEncodeRecord (GHC.Generics.S1 c (GHC.Generics.K1 i a))
instance (Data.Winery.Serialise a, GHC.Generics.Selector c) => Data.Winery.GSerialiseRecord (GHC.Generics.S1 c (GHC.Generics.K1 i a))
instance Data.Winery.Serialise a => Data.Winery.GSerialiseProduct (GHC.Generics.K1 i a)
instance Data.Winery.Serialise GHC.Types.Ordering
instance forall k (f :: k -> *) (g :: k -> *). (Data.Winery.GSerialiseVariant f, Data.Winery.GSerialiseVariant g) => Data.Winery.GSerialiseVariant (f GHC.Generics.:+: g)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). (Data.Winery.GSerialiseProduct f, GHC.Generics.Constructor c) => Data.Winery.GSerialiseVariant (GHC.Generics.C1 c f)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GSerialiseVariant f => Data.Winery.GSerialiseVariant (GHC.Generics.S1 c f)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GSerialiseVariant f => Data.Winery.GSerialiseVariant (GHC.Generics.D1 c f)
instance Data.Winery.GSerialiseProduct GHC.Generics.U1
instance forall k (f :: k -> *) i (c :: GHC.Generics.Meta). Data.Winery.GSerialiseProduct f => Data.Winery.GSerialiseProduct (GHC.Generics.M1 i c f)
instance forall k (f :: k -> *) (g :: k -> *). (Data.Winery.GSerialiseProduct f, Data.Winery.GSerialiseProduct g) => Data.Winery.GSerialiseProduct (f GHC.Generics.:*: g)
instance forall k (f :: k -> *) (g :: k -> *). (Data.Winery.GSerialiseRecord f, Data.Winery.GSerialiseRecord g) => Data.Winery.GSerialiseRecord (f GHC.Generics.:*: g)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GSerialiseRecord f => Data.Winery.GSerialiseRecord (GHC.Generics.C1 c f)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GSerialiseRecord f => Data.Winery.GSerialiseRecord (GHC.Generics.D1 c f)
instance forall k (f :: k -> *) (g :: k -> *). (Data.Winery.GEncodeRecord f, Data.Winery.GEncodeRecord g) => Data.Winery.GEncodeRecord (f GHC.Generics.:*: g)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GEncodeRecord f => Data.Winery.GEncodeRecord (GHC.Generics.C1 c f)
instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Winery.GEncodeRecord f => Data.Winery.GEncodeRecord (GHC.Generics.D1 c f)
instance GHC.Base.Applicative Data.Winery.Deserialiser
instance GHC.Base.Alternative Data.Winery.Deserialiser
instance GHC.Base.Applicative Data.Winery.Plan
instance GHC.Base.Monad Data.Winery.Plan
instance GHC.Base.Alternative Data.Winery.Plan
instance Data.Text.Prettyprint.Doc.Internal.Pretty Data.Winery.Schema

module Data.Winery.Query
newtype Query a b
Query :: (Deserialiser [a] -> Deserialiser [b]) -> Query a b
[runQuery] :: Query a b -> Deserialiser [a] -> Deserialiser [b]
invalid :: StrategyError -> Query a b
list :: Query a a
range :: Int -> Int -> Query a a
field :: Typeable a => Text -> Query a a
con :: Typeable a => Text -> Query a a
select :: Query a Bool -> Query a a
instance GHC.Base.Functor (Data.Winery.Query.Query a)
instance Control.Category.Category Data.Winery.Query.Query
instance GHC.Base.Applicative (Data.Winery.Query.Query a)
instance GHC.Base.Alternative (Data.Winery.Query.Query a)

module Data.Winery.Query.Parser
parseQuery :: Typeable a => Parser (Query (Doc a) (Doc a))

module Data.Winery.Term

-- | Common representation for any winery data. Handy for prettyprinting
--   winery-serialised data.
data Term
TUnit :: Term
TBool :: !Bool -> Term
TChar :: !Char -> Term
TWord8 :: !Word8 -> Term
TWord16 :: !Word16 -> Term
TWord32 :: !Word32 -> Term
TWord64 :: !Word64 -> Term
TInt8 :: !Int8 -> Term
TInt16 :: !Int16 -> Term
TInt32 :: !Int32 -> Term
TInt64 :: !Int64 -> Term
TInteger :: !Integer -> Term
TFloat :: !Float -> Term
TDouble :: !Double -> Term
TBytes :: !ByteString -> Term
TText :: !Text -> Term
TUTCTime :: !UTCTime -> Term
TList :: [Term] -> Term
TProduct :: [Term] -> Term
TRecord :: [(Text, Term)] -> Term
TVariant :: !Text -> [Term] -> Term

-- | Deserialiser for a <a>Term</a>.
decodeTerm :: Deserialiser Term

-- | Deserialise a <a>serialise</a>d <a>Bytestring</a>.
deserialiseTerm :: ByteString -> Either (Doc AnsiStyle) (Schema, Term)
instance GHC.Show.Show Data.Winery.Term.Term
instance Data.Aeson.Types.ToJSON.ToJSON Data.Winery.Term.Term
instance Data.Text.Prettyprint.Doc.Internal.Pretty Data.Winery.Term.Term
