describe 0.4.0.0 → 0.4.0.1
raw patch · 6 files changed
+52/−26 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Serialize.Describe.Descriptor: lookAhead :: () => Get a -> Get a
+ Data.Serialize.Describe.Class: type Context m a = ();
+ Data.Serialize.Describe.Class: }
+ Data.Serialize.Describe.Descriptor: conditionally :: (MonadTransControl m, forall x. Monad x => Monad (m x)) => (s -> Maybe a) -> (a -> Bool) -> DescriptorM m a a -> DescriptorM m s (Maybe a)
- Data.Serialize.Describe.Class: class Describe a
+ Data.Serialize.Describe.Class: class Describe a where {
- Data.Serialize.Describe.Class: describe :: (Describe a, MonadTrans m, forall x. Monad x => Monad (m x), Context m a) => DescriptorM m a a
+ Data.Serialize.Describe.Class: describe :: (Describe a, Generic a, GDescribe (Rep a), MonadTrans m, forall x. Monad x => Monad (m x)) => DescriptorM m a a
- Data.Serialize.Describe.Class: type family Context (m :: (* -> *) -> * -> *) a :: Constraint
+ Data.Serialize.Describe.Class: type family Context (m :: (* -> *) -> * -> *) a :: Constraint;
Files
- CHANGELOG.md +5/−0
- describe.cabal +2/−2
- src/Data/Serialize/Describe/Class.hs +11/−8
- src/Data/Serialize/Describe/Combinators/ByteEnum.hs +3/−4
- src/Data/Serialize/Describe/Descriptor.hs +1/−1
- src/Data/Serialize/Describe/Internal/Descriptor.hs +30/−11
CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for describe +##0.4.0.1 -- 2020-01-19++* Fixed module exports+* Updated docs+ ##0.4.0.0 -- 2020-01-19 * Added lens isomorphism utilities
describe.cabal view
@@ -1,13 +1,13 @@ cabal-version: 2.4 name: describe-version: 0.4.0.0+version: 0.4.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 license: BSD-3-Clause license-file: LICENSE author: Riuga-maintainer: n/a+maintainer: Riuga category: Data extra-source-files: CHANGELOG.md
src/Data/Serialize/Describe/Class.hs view
@@ -1,5 +1,5 @@ module Data.Serialize.Describe.Class(- Describe, Context, describe,+ Describe(..), field, isoField ) where @@ -25,6 +25,7 @@ import Data.Serialize.Describe.Isomorphisms class Describe a where+ {-# MINIMAL #-} type Context (m :: (* -> *) -> * -> *) a :: Constraint type Context m a = () @@ -38,13 +39,15 @@ describe = morphTransformer (lift . runIdentityT) $ dimap from to gdescribe -- | A descriptor from structure to field.-field :: forall a m s. ( Describe a- , MonadTrans m- , forall x. Monad x => Monad (m x)- , Context m a- )- => (s -> a) - -> DescriptorM m s a+field + :: forall a m s. + ( Describe a+ , MonadTrans m+ , forall x. Monad x => Monad (m x)+ , Context m a+ )+ => (s -> a) + -> DescriptorM m s a field f = morphRef f describe -- | Similar to @field@, but applied to an isomorphism.
src/Data/Serialize/Describe/Combinators/ByteEnum.hs view
@@ -8,10 +8,9 @@ import Data.Serialize.Describe.Isomorphisms -- | Wraps an @Enum@ to be described as a Word8. Intended to be used with DerivingVia so as to not introduce unnecessary newtype wrappers:--- >>>--- data MyEnum = A | B | C --- deriving Enum--- deriving Describe via ByteEnum MyEnum+-- > data MyEnum = A | B | C +-- > deriving Enum+-- > deriving Describe via ByteEnum MyEnum newtype ByteEnum e = ByteEnum { unwrapByteEnum :: e } deriving (Generic)
src/Data/Serialize/Describe/Descriptor.hs view
@@ -12,7 +12,7 @@ morphRef, morphTransformer, isolate,- lookAhead,+ conditionally, cursor ) where
src/Data/Serialize/Describe/Internal/Descriptor.hs view
@@ -57,18 +57,34 @@ unwrapPut s = flip evalStateT 0 . ($ s) . snd . unwrapDescriptor -- | Shifts the reference point of the described structure using the provided morphism. Identical to @lmap@.-morphRef :: (MonadTrans m, forall x. Monad x => Monad (m x)) => (s -> t) -> DescriptorM m t a -> DescriptorM m s a+morphRef + :: ( MonadTrans m+ , forall x. Monad x => Monad (m x)+ ) + => (s -> t) + -> DescriptorM m t a + -> DescriptorM m s a morphRef f (Descriptor (g, p)) = Descriptor (g, p . f) -- | Morphs the underlying monad transformer-morphTransformer :: (MonadTrans t, MonadTrans u, forall n. Monad n => (Monad (t n), Monad (u n)))- => (forall m x. Monad m => t m x -> u m x)- -> DescriptorM t s a- -> DescriptorM u s a+morphTransformer + :: ( MonadTrans t+ , MonadTrans u+ , forall n. Monad n => (Monad (t n), Monad (u n))+ )+ => (forall m x. Monad m => t m x -> u m x)+ -> DescriptorM t s a+ -> DescriptorM u s a morphTransformer f (Descriptor (g, p)) = Descriptor (hoist f g, hoist f <$> p) -- | Wrapper around @isolate@ from Data.Serialize.Get-isolate :: (MonadTransControl m, forall x. Monad x => Monad (m x)) => Int -> DescriptorM m s a -> DescriptorM m s a+isolate + :: ( MonadTransControl m+ , forall x. Monad x => Monad (m x)+ ) + => Int + -> DescriptorM m s a + -> DescriptorM m s a isolate amt desc = Descriptor (liftWith (\r' -> @@ -77,11 +93,14 @@ >>= restoreT . return, snd $ unwrapDescriptor desc) -- | Similar to lookAhead from Data.Serialize.Get; puts only if the field is @Just@-conditionally :: (MonadTransControl m, forall x. Monad x => Monad (m x))- => (s -> Maybe a)- -> (a -> Bool)- -> DescriptorM m a a - -> DescriptorM m s (Maybe a)+conditionally + :: ( MonadTransControl m+ , forall x. Monad x => Monad (m x)+ )+ => (s -> Maybe a)+ -> (a -> Bool)+ -> DescriptorM m a a + -> DescriptorM m s (Maybe a) conditionally f pd desc = Descriptor (g, p) where g =