-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Combinators and utilities to make Generic-based deriving of Binary easier and more expressive -- -- Please see the README on GitHub at -- https://github.com/0xd34df00d/binary-generic-combinators#readme @package binary-generic-combinators @version 0.4.2.0 -- | This module defines a bunch of types to be used as fields of records -- with Generic-based deriving of Binary instances. For -- example: -- --
--   data MyFileFormat = MyFileFormat
--     { header :: MatchBytes "my format header" '[ 0xd3, 0x4d, 0xf0, 0x0d ]
--     , slack :: SkipByte 0xff
--     , reserved :: SkipCount Word8 4
--     , subElements :: Some MyElement
--     } deriving (Generic, Binary)
--   
module Data.Binary.Combinators -- | Zero or more elements of a, parsing as long as the parser for -- a succeeds. -- -- Many Word8 will consume all your input! newtype Many a Many :: [a] -> Many a [getMany] :: Many a -> [a] -- | One or more elements of a, parsing as long as the parser for -- a succeeds. -- -- Some Word8 will consume all your non-empty input! newtype Some a Some :: [a] -> Some a [getSome] :: Some a -> [a] -- | First, parse the elements count as type ty. Then, parse -- exactly as many elements of type a. newtype CountedBy ty a CountedBy :: [a] -> CountedBy ty a [getCounted] :: CountedBy ty a -> [a] -- | Parse out and skip n elements of type ty. -- -- Serializing this type produces no bytes. data SkipCount ty (n :: Nat) SkipCount :: SkipCount ty (n :: Nat) -- | Skip any number of bytes with value n. -- -- Serializing this type produces no bytes. data SkipByte (n :: Nat) SkipByte :: SkipByte (n :: Nat) -- | MatchBytes str bytes ensures that the subsequent bytes in the -- input stream are the same as bytes. -- -- str can be used to denote the context in which -- MatchBytes is used for better parse failure messages. For -- example, MatchBytes "my format header" '[ 0xd3, 0x4d, 0xf0, 0x0d -- ] consumes four bytes from the input stream if they are equal to -- [ 0xd3, 0x4d, 0xf0, 0x0d ] respectively, or fails otherwise. -- -- Serializing this type produces the bytes. data MatchBytes (ctx :: Symbol) (bytes :: [Nat]) :: Type -- | Produce the (singleton) value of type MatchBytes ctx -- ns. matchBytes :: MatchBytesSing ctx ns => MatchBytes ctx ns -- | An alias for MatchBytes when you only need to match a single -- byte. type MatchByte ctx byte = MatchBytes ctx '[byte] instance Data.Traversable.Traversable Data.Binary.Combinators.Many instance Data.Foldable.Foldable Data.Binary.Combinators.Many instance GHC.Base.Functor Data.Binary.Combinators.Many instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Binary.Combinators.Many a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Binary.Combinators.Many a) instance Data.Traversable.Traversable Data.Binary.Combinators.Some instance Data.Foldable.Foldable Data.Binary.Combinators.Some instance GHC.Base.Functor Data.Binary.Combinators.Some instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Binary.Combinators.Some a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Binary.Combinators.Some a) instance forall k (ty :: k). Data.Traversable.Traversable (Data.Binary.Combinators.CountedBy ty) instance forall k (ty :: k). Data.Foldable.Foldable (Data.Binary.Combinators.CountedBy ty) instance forall k (ty :: k). GHC.Base.Functor (Data.Binary.Combinators.CountedBy ty) instance forall k (ty :: k) a. GHC.Classes.Ord a => GHC.Classes.Ord (Data.Binary.Combinators.CountedBy ty a) instance forall k (ty :: k) a. GHC.Classes.Eq a => GHC.Classes.Eq (Data.Binary.Combinators.CountedBy ty a) instance forall k (ty :: k) (n :: GHC.Types.Nat). GHC.Show.Show (Data.Binary.Combinators.SkipCount ty n) instance forall k (ty :: k) (n :: GHC.Types.Nat). GHC.Classes.Ord (Data.Binary.Combinators.SkipCount ty n) instance forall k (ty :: k) (n :: GHC.Types.Nat). GHC.Classes.Eq (Data.Binary.Combinators.SkipCount ty n) instance GHC.Show.Show (Data.Binary.Combinators.SkipByte n) instance GHC.Classes.Ord (Data.Binary.Combinators.SkipByte n) instance GHC.Classes.Eq (Data.Binary.Combinators.SkipByte n) instance GHC.Classes.Eq (Data.Binary.Combinators.MatchBytes s ns) instance GHC.Classes.Ord (Data.Binary.Combinators.MatchBytes s ns) instance Data.Binary.Combinators.MatchBytesSing ctx '[] instance (GHC.TypeNats.KnownNat n, Data.Binary.Combinators.MatchBytesSing ctx ns) => Data.Binary.Combinators.MatchBytesSing ctx (n : ns) instance Data.Binary.Combinators.MatchBytesSing ctx ns => Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.MatchBytes ctx ns) instance Data.Binary.Class.Binary (Data.Binary.Combinators.MatchBytes ctx '[]) instance (GHC.TypeLits.KnownSymbol ctx, GHC.TypeNats.KnownNat n, Data.Binary.Class.Binary (Data.Binary.Combinators.MatchBytes ctx ns)) => Data.Binary.Class.Binary (Data.Binary.Combinators.MatchBytes ctx (n : ns)) instance GHC.Show.Show (Data.Binary.Combinators.MatchBytes ctx ns) instance GHC.TypeNats.KnownNat n => Data.Binary.Class.Binary (Data.Binary.Combinators.SkipByte n) instance Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.SkipByte n) instance (GHC.Num.Num ty, Data.Binary.Class.Binary ty, GHC.TypeNats.KnownNat n) => Data.Binary.Class.Binary (Data.Binary.Combinators.SkipCount ty n) instance forall k (ty :: k) (n :: GHC.Types.Nat). Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.SkipCount ty n) instance forall k a (ty :: k). GHC.Show.Show a => GHC.Show.Show (Data.Binary.Combinators.CountedBy ty a) instance (GHC.Real.Integral ty, Data.Binary.Class.Binary ty, Data.Binary.Class.Binary a) => Data.Binary.Class.Binary (Data.Binary.Combinators.CountedBy ty a) instance forall k a (ty :: k). Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.CountedBy ty a) instance GHC.Show.Show a => GHC.Show.Show (Data.Binary.Combinators.Some a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Data.Binary.Combinators.Some a) instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.Some a) instance GHC.Show.Show a => GHC.Show.Show (Data.Binary.Combinators.Many a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Data.Binary.Combinators.Many a) instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Data.Binary.Combinators.Many a) -- | This module defines some types to be used with DerivingVia -- when deriving Binary instances. module Data.Binary.DerivingVia -- | Try to deserialize each constructor of a in order. -- -- For sum types, stock Binary writes (and expects to read) an -- integer denoting the index of the constructor. This isn't always -- what's needed. In the following example, the constructor is uniquely -- identified by the marker byte, and its index in the Haskell ADT is -- irrelevant: -- --
--   data JfifSegment
--     = App0Segment (MatchByte "app0 segment" 0xdb, JfifApp0)
--     | DqtSegment  (MatchByte "dqt segment"  0xdb, QuantTable)
--     | SofSegment  (MatchByte "sof segment"  0xc0, SofInfo)
--     | DhtSegment  (MatchByte "dht segment"  0xc4, HuffmanTable)
--     | DriSegment  (MatchByte "dri segment"  0xdd, RestartInterval)
--     | SosSegment  (MatchByte "sos segment"  0xda, SosImage)
--     | UnknownSegment RawSegment
--     deriving Generic
--     deriving Binary via Alternatively JfifSegment
--   
newtype Alternatively a Alternatively :: a -> Alternatively a [getAlt] :: Alternatively a -> a instance Data.Binary.Class.Binary grecord => Data.Binary.DerivingVia.GAltBinary (GHC.Generics.K1 i grecord) instance Data.Binary.DerivingVia.GAltBinary grecord => Data.Binary.DerivingVia.GAltBinary (GHC.Generics.M1 i t grecord) instance (Data.Binary.DerivingVia.GAltBinary l, Data.Binary.DerivingVia.GAltBinary r) => Data.Binary.DerivingVia.GAltBinary (l GHC.Generics.:*: r) instance (Data.Binary.DerivingVia.GAltBinary l, Data.Binary.DerivingVia.GAltBinary r) => Data.Binary.DerivingVia.GAltBinary (l GHC.Generics.:+: r) instance (GHC.Generics.Generic a, Data.Binary.DerivingVia.GAltBinary (GHC.Generics.Rep a)) => Data.Binary.Class.Binary (Data.Binary.DerivingVia.Alternatively a)