packages feed

describe 0.2.0.0 → 0.2.0.1

raw patch · 5 files changed

+92/−8 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Serialize.Describe.Combinators: BE :: a -> BE a
- Data.Serialize.Describe.Combinators: LE :: a -> LE a
- Data.Serialize.Describe.Combinators: [unwrapBE] :: BE a -> a
- Data.Serialize.Describe.Combinators: [unwrapLE] :: LE a -> a
- Data.Serialize.Describe.Combinators: newtype BE a
- Data.Serialize.Describe.Combinators: newtype LE a
+ Data.Serialize.Describe.Class: instance (Data.Serialize.Describe.Class.Describe a, Data.Vector.Fixed.Cont.Arity n, Data.Vector.Fixed.Cont.Vector (Data.Vector.Fixed.Boxed.Vec n) a, GHC.TypeNats.KnownNat n) => Data.Serialize.Describe.Class.Describe (Data.Vector.Fixed.Boxed.Vec n a)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe ()
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Int.Int16)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Int.Int32)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Int.Int64)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Types.Double)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Types.Float)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Word.Word16)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Word.Word32)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.BE GHC.Word.Word64)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Int.Int16)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Int.Int32)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Int.Int64)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Types.Double)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Types.Float)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Word.Word16)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Word.Word32)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe (Data.Serialize.Describe.Endianness.LE GHC.Word.Word64)
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe GHC.Int.Int8
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe GHC.Types.Bool
+ Data.Serialize.Describe.Class: instance Data.Serialize.Describe.Class.Describe GHC.Word.Word8
+ Data.Serialize.Describe.Endianness: BE :: a -> BE a
+ Data.Serialize.Describe.Endianness: LE :: a -> LE a
+ Data.Serialize.Describe.Endianness: [unwrapBE] :: BE a -> a
+ Data.Serialize.Describe.Endianness: [unwrapLE] :: LE a -> a
+ Data.Serialize.Describe.Endianness: newtype BE a
+ Data.Serialize.Describe.Endianness: newtype LE a

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for describe +## 0.2.0.1 -- 2019-10-06++* Exposed hidden instances.+ ## 0.2.0.0 -- 2019-10-06  * Added `Describe` type class.
describe.cabal view
@@ -3,7 +3,7 @@ --   For further documentation, see http://haskell.org/cabal/users-guide/  name:                describe-version:             0.2.0.0+version:             0.2.0.1 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@@ -23,6 +23,7 @@                       MultiParamTypeClasses,                       AllowAmbiguousTypes,                       FunctionalDependencies,+                      TypeFamilies,                       TypeOperators,                       FlexibleContexts,                       DefaultSignatures,@@ -44,6 +45,7 @@   import: deps   exposed-modules:     Data.Serialize.Describe,                        Data.Serialize.Describe.Descriptor,+                       Data.Serialize.Describe.Endianness,                        Data.Serialize.Describe.Combinators,                        Data.Serialize.Describe.Combinators.LE,                        Data.Serialize.Describe.Combinators.BE,
src/Data/Serialize/Describe/Class.hs view
@@ -3,9 +3,19 @@ ) where  import GHC.Generics+import GHC.TypeNats import Control.Monad+import qualified Data.Vector.Fixed as V+import Data.Vector.Fixed.Boxed (Vec)+import Data.Int+import Data.Proxy+import Data.Word import Data.Serialize.Describe.Descriptor+import Data.Serialize.Describe.Endianness+import qualified Data.Serialize.Describe.Combinators.LE as LE+import qualified Data.Serialize.Describe.Combinators.BE as BE + class Describe a where   describe :: (s -> a) -> Descriptor s a @@ -34,3 +44,67 @@     where       extract (K1 x) = x +instance Describe Bool where+    describe f = toEnum . fromIntegral <$> describe (fromIntegral @_ @Word8 . fromEnum . f)++instance Describe Word8 where+    describe f = Descriptor (unwrapGet (LE.w8 f), \s -> unwrapPut s (LE.w8 f >> pure (f s)))++instance Describe (LE Word16) where+    describe f = Descriptor (unwrapGet (LE <$> LE.w16 (unwrapLE . f)), \s -> unwrapPut s (LE.w16 (unwrapLE . f) >> pure (f s)))++instance Describe (LE Word32) where+    describe f = Descriptor (unwrapGet (LE <$> LE.w32 (unwrapLE . f)), \s -> unwrapPut s (LE.w32 (unwrapLE . f) >> pure (f s)))++instance Describe (LE Word64) where+    describe f = Descriptor (unwrapGet (LE <$> LE.w64 (unwrapLE . f)), \s -> unwrapPut s (LE.w64 (unwrapLE . f) >> pure (f s)))++instance Describe (BE Word16) where+    describe f = Descriptor (unwrapGet (BE <$> BE.w16 (unwrapBE . f)), \s -> unwrapPut s (BE.w16 (unwrapBE . f) >> pure (f s)))++instance Describe (BE Word32) where+    describe f = Descriptor (unwrapGet (BE <$> BE.w32 (unwrapBE . f)), \s -> unwrapPut s (BE.w32 (unwrapBE . f) >> pure (f s)))++instance Describe (BE Word64) where+    describe f = Descriptor (unwrapGet (BE <$> BE.w64 (unwrapBE . f)), \s -> unwrapPut s (BE.w64 (unwrapBE . f) >> pure (f s)))++instance Describe Int8 where+    describe f = Descriptor (unwrapGet (LE.i8 f), \s -> unwrapPut s (LE.i8 f >> pure (f s)))++instance Describe (LE Int16) where+    describe f = Descriptor (unwrapGet (LE <$> LE.i16 (unwrapLE . f)), \s -> unwrapPut s (LE.i16 (unwrapLE . f) >> pure (f s)))++instance Describe (LE Int32) where+    describe f = Descriptor (unwrapGet (LE <$> LE.i32 (unwrapLE . f)), \s -> unwrapPut s (LE.i32 (unwrapLE . f) >> pure (f s)))++instance Describe (LE Int64) where+    describe f = Descriptor (unwrapGet (LE <$> LE.i64 (unwrapLE . f)), \s -> unwrapPut s (LE.i64 (unwrapLE . f) >> pure (f s)))++instance Describe (BE Int16) where+    describe f = Descriptor (unwrapGet (BE <$> BE.i16 (unwrapBE . f)), \s -> unwrapPut s (BE.i16 (unwrapBE . f) >> pure (f s)))++instance Describe (BE Int32) where+    describe f = Descriptor (unwrapGet (BE <$> BE.i32 (unwrapBE . f)), \s -> unwrapPut s (BE.i32 (unwrapBE . f) >> pure (f s)))++instance Describe (BE Int64) where+    describe f = Descriptor (unwrapGet (BE <$> BE.i64 (unwrapBE . f)), \s -> unwrapPut s (BE.i64 (unwrapBE . f) >> pure (f s)))++instance Describe (LE Float) where+    describe f = Descriptor (unwrapGet (LE <$> LE.f32 (unwrapLE . f)), \s -> unwrapPut s (LE.f32 (unwrapLE . f) >> pure (f s)))++instance Describe (LE Double) where+    describe f = Descriptor (unwrapGet (LE <$> LE.f64 (unwrapLE . f)), \s -> unwrapPut s (LE.f64 (unwrapLE . f) >> pure (f s)))++instance Describe (BE Float) where+    describe f = Descriptor (unwrapGet (BE <$> BE.f32 (unwrapBE . f)), \s -> unwrapPut s (BE.f32 (unwrapBE . f) >> pure (f s)))++instance Describe (BE Double) where+    describe f = Descriptor (unwrapGet (BE <$> BE.f64 (unwrapBE . f)), \s -> unwrapPut s (BE.f64 (unwrapBE . f) >> pure (f s)))++instance Describe () where+  describe _ = pure ()++instance (Describe a, V.Arity n, V.Vector (Vec n) a, KnownNat n) => Describe (Vec n a) where+    describe f =+       V.fromList <$> forM [0..fromIntegral (natVal (Proxy :: Proxy n))-1] +        (\i -> describe $ (V.! i) . f)
src/Data/Serialize/Describe/Combinators.hs view
@@ -1,8 +1,7 @@+-- | Various type-level combinators to ease generic derivation of 'Describe' module Data.Serialize.Describe.Combinators(   Optional(..),-  StaticPred(..),-  LE(..),-  BE(..)+  StaticPred(..) ) where  import GHC.TypeNats@@ -11,10 +10,6 @@ import Data.Serialize.Describe.Descriptor import Data.Serialize.Describe.Class import qualified Data.Serialize.Get as G--newtype LE a = LE { unwrapLE :: a }--newtype BE a = BE { unwrapBE :: a }  newtype Optional p t = Optional { unwrapOptional :: Maybe t } 
+ src/Data/Serialize/Describe/Endianness.hs view
@@ -0,0 +1,9 @@+module Data.Serialize.Describe.Endianness(+  LE(..),+  BE(..)+) where++newtype LE a = LE { unwrapLE :: a }++newtype BE a = BE { unwrapBE :: a }+