describe 0.2.0.1 → 0.2.0.2
raw patch · 3 files changed
+16/−5 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Serialize.Describe.Combinators: class StaticPred t a
- Data.Serialize.Describe.Combinators: instance (Data.Serialize.Describe.Class.Describe a, Data.Serialize.Describe.Combinators.StaticPred a p) => Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Combinators.Optional p a)
- Data.Serialize.Describe.Combinators: instance (GHC.TypeNats.KnownNat n, GHC.Real.Integral i) => Data.Serialize.Describe.Combinators.StaticPred i (Data.Serialize.Describe.Combinators.Equals n)
+ Data.Serialize.Describe.Combinators: class Predicate t a
+ Data.Serialize.Describe.Combinators: data Equals (n :: Nat)
+ Data.Serialize.Describe.Combinators: instance (Data.Serialize.Describe.Class.Describe a, Data.Serialize.Describe.Combinators.Predicate a p) => Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Combinators.Optional p a)
+ Data.Serialize.Describe.Combinators: instance (GHC.TypeNats.KnownNat n, GHC.Real.Integral i) => Data.Serialize.Describe.Combinators.Predicate i (Data.Serialize.Describe.Combinators.Equals n)
+ Data.Serialize.Describe.Combinators: instance (GHC.TypeNats.KnownNat n1, GHC.TypeNats.KnownNat n2, Data.Vector.Fixed.Cont.Arity n2, Data.Vector.Fixed.Cont.Vector (Data.Vector.Fixed.Boxed.Vec n2) i, GHC.Real.Integral i) => Data.Serialize.Describe.Combinators.Predicate (Data.Vector.Fixed.Boxed.Vec n2 i) (Data.Serialize.Describe.Combinators.Equals n1)
- Data.Serialize.Describe.Combinators: check :: StaticPred t a => t -> Bool
+ Data.Serialize.Describe.Combinators: check :: Predicate t a => t -> Bool
Files
- CHANGELOG.md +4/−0
- describe.cabal +1/−1
- src/Data/Serialize/Describe/Combinators.hs +11/−4
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for describe +## 0.2.0.2 -- 2019-10-06++* Exposed `Equals`.+ ## 0.2.0.1 -- 2019-10-06 * Exposed hidden instances.
describe.cabal view
@@ -3,7 +3,7 @@ -- For further documentation, see http://haskell.org/cabal/users-guide/ name: describe-version: 0.2.0.1+version: 0.2.0.2 synopsis: Combinators for describing binary data structures description: Combinators for describing binary data structures, which eliminate the boilerplate of having to write isomorphic Get and Put instances. Please see the Github page for examples. homepage: https://github.com/riugabachi/describe
src/Data/Serialize/Describe/Combinators.hs view
@@ -1,7 +1,8 @@ -- | Various type-level combinators to ease generic derivation of 'Describe' module Data.Serialize.Describe.Combinators( Optional(..),- StaticPred(..)+ Predicate(..),+ Equals ) where import GHC.TypeNats@@ -9,19 +10,25 @@ import Data.Maybe import Data.Serialize.Describe.Descriptor import Data.Serialize.Describe.Class+import qualified Data.Vector.Fixed as V+import Data.Vector.Fixed.Boxed (Vec) import qualified Data.Serialize.Get as G +-- | An 'Optional' represents a field which is optionally-serializable. The field will be parsed via a lookAhead and, if the value matches the 'Predicate' p, then the field exists. If not, it is assumed as though the field was never serialized in the first place and the value will be set to 'Nothing'; parsing will then continue on as usual. newtype Optional p t = Optional { unwrapOptional :: Maybe t } -class StaticPred t a where+class Predicate t a where check :: t -> Bool data Equals (n :: Nat) -instance (KnownNat n, Integral i) => StaticPred i (Equals n) where+instance (KnownNat n, Integral i) => Predicate i (Equals n) where check i = i == (fromIntegral $ natVal (Proxy :: Proxy n)) -instance (Describe a, StaticPred a p) => Describe (Optional p a) where+instance (KnownNat n1, KnownNat n2, V.Arity n2, V.Vector (Vec n2) i, Integral i) => Predicate (Vec n2 i) (Equals n1) where+ check = V.all (== fromIntegral (natVal (Proxy :: Proxy n1)))++instance (Describe a, Predicate a p) => Describe (Optional p a) where describe f = Descriptor (g, p) where g = do