| Copyright | (c) 2019 Oleg Grenrus |
|---|---|
| Safe Haskell | None |
| Language | Haskell2010 |
Distribution.Utils.Structured
Description
Structurally tag binary serialisation stream.
Useful when most Binary instances are Generic derived.
Say you have a data type
data Record = Record
{ _recordFields :: HM.HashMap Text (Integer, ByteString)
, _recordEnabled :: Bool
}
deriving (Eq, Show, Generic)
instance Binary Record
instance Structured Record
then you can serialise and deserialise Record values with a structure tag by simply
structuredEncoderecord ::ByteStringstructuredDecodelbs :: IO Record
If structure of Record changes in between, deserialisation will fail early.
Technically, Structured is not related to Binary, and may
be useful in other uses.
Synopsis
- structuredEncode :: (Binary a, Structured a) => a -> ByteString
- structuredEncodeFile :: (Binary a, Structured a) => FilePath -> a -> IO ()
- structuredDecode :: (Binary a, Structured a) => ByteString -> a
- structuredDecodeOrFailIO :: (Binary a, Structured a) => ByteString -> IO (Either String a)
- structuredDecodeFileOrFail :: (Binary a, Structured a) => FilePath -> IO (Either String a)
- class Typeable a => Structured a where
- type MD5 = Fingerprint
- structureHash :: Structured a => Proxy a -> MD5
- structureBuilder :: Structure -> Builder
- genericStructure :: (Typeable a, Generic a, GStructured (Rep a)) => Proxy a -> Structure
- class GStructured (f :: Type -> Type)
- nominalStructure :: forall {k} (a :: k). Typeable a => Proxy a -> Structure
- containerStructure :: forall {k} (f :: Type -> k) a. (Typeable f, Structured a) => Proxy (f a) -> Structure
- data Structure
- data Tag (a :: k) = Tag
- type TypeName = String
- type ConstructorName = String
- type TypeVersion = Word32
- type SopStructure = [(ConstructorName, [Structure])]
- hashStructure :: Structure -> MD5
- typeVersion :: Functor f => (TypeVersion -> f TypeVersion) -> Structure -> f Structure
- typeName :: Functor f => (TypeName -> f TypeName) -> Structure -> f Structure
Encoding and decoding
These functions operate like binary's counterparts,
but the serialised version has a structure hash in front.
structuredEncode :: (Binary a, Structured a) => a -> ByteString Source #
Structured encode .
Encode a value to using binary serialisation to a lazy ByteString .
Encoding starts with 16 byte large structure hash.
structuredEncodeFile :: (Binary a, Structured a) => FilePath -> a -> IO () Source #
Lazily serialise a value to a file
structuredDecode :: (Binary a, Structured a) => ByteString -> a Source #
Structured decode .
Decode a value from a lazy ByteString , reconstructing the original structure.
Throws pure exception on invalid inputs.
structuredDecodeOrFailIO :: (Binary a, Structured a) => ByteString -> IO (Either String a) Source #
structuredDecodeFileOrFail :: (Binary a, Structured a) => FilePath -> IO (Either String a) Source #
Lazily reconstruct a value previously written to a file.
Structured class
class Typeable a => Structured a where Source #
Class of types with a known Structure .
For regular data types Structured can be derived generically.
data Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (Generic )
instance Structured Record
Since: 3.2.0.0
Minimal complete definition
Nothing
Methods
Instances
Instances details
Instance details
Defined in Distribution.Backpack
Instance details
Defined in Distribution.Backpack
Instance details
Defined in Distribution.CabalSpecVersion
Methods
structure :: Proxy CabalSpecVersion -> Structure Source #
structureHash' :: Tagged CabalSpecVersion MD5
Instance details
Defined in Distribution.Compiler
Instance details
Defined in Distribution.Compiler
Methods
structure :: Proxy CompilerFlavor -> Structure Source #
structureHash' :: Tagged CompilerFlavor MD5
Instance details
Defined in Distribution.Compiler
Instance details
Defined in Distribution.License
Instance details
Defined in Distribution.ModuleName
Instance details
Defined in Distribution.SPDX.License
Instance details
Defined in Distribution.SPDX.LicenseExceptionId
Methods
structure :: Proxy LicenseExceptionId -> Structure Source #
structureHash' :: Tagged LicenseExceptionId MD5
Instance details
Defined in Distribution.SPDX.LicenseExpression
Methods
structure :: Proxy LicenseExpression -> Structure Source #
structureHash' :: Tagged LicenseExpression MD5
Instance details
Defined in Distribution.SPDX.LicenseExpression
Methods
structure :: Proxy SimpleLicenseExpression -> Structure Source #
structureHash' :: Tagged SimpleLicenseExpression MD5
Instance details
Defined in Distribution.SPDX.LicenseId
Instance details
Defined in Distribution.SPDX.LicenseReference
Instance details
Defined in Distribution.System
Instance details
Defined in Distribution.System
Instance details
Defined in Distribution.System
Instance details
Defined in Distribution.Types.AbiDependency
Methods
structure :: Proxy AbiDependency -> Structure Source #
structureHash' :: Tagged AbiDependency MD5
Instance details
Defined in Distribution.Types.AbiHash
Instance details
Defined in Distribution.Types.Benchmark
Instance details
Defined in Distribution.Types.BenchmarkInterface
Methods
structure :: Proxy BenchmarkInterface -> Structure Source #
structureHash' :: Tagged BenchmarkInterface MD5
Instance details
Defined in Distribution.Types.BenchmarkType
Methods
structure :: Proxy BenchmarkType -> Structure Source #
structureHash' :: Tagged BenchmarkType MD5
Instance details
Defined in Distribution.Types.BuildInfo
Instance details
Defined in Distribution.Types.BuildType
Instance details
Defined in Distribution.Types.Component
Instance details
Defined in Distribution.Types.ComponentId
Methods
structure :: Proxy ComponentId -> Structure Source #
structureHash' :: Tagged ComponentId MD5
Instance details
Defined in Distribution.Types.ComponentName
Methods
structure :: Proxy ComponentName -> Structure Source #
structureHash' :: Tagged ComponentName MD5
Instance details
Defined in Distribution.Types.ComponentRequestedSpec
Methods
structure :: Proxy ComponentRequestedSpec -> Structure Source #
structureHash' :: Tagged ComponentRequestedSpec MD5
Instance details
Defined in Distribution.Types.ConfVar
Instance details
Defined in Distribution.Types.Dependency
Instance details
Defined in Distribution.Types.ExeDependency
Methods
structure :: Proxy ExeDependency -> Structure Source #
structureHash' :: Tagged ExeDependency MD5
Instance details
Defined in Distribution.Types.Executable
Instance details
Defined in Distribution.Types.ExecutableScope
Methods
structure :: Proxy ExecutableScope -> Structure Source #
structureHash' :: Tagged ExecutableScope MD5
Instance details
Defined in Distribution.Types.ExposedModule
Methods
structure :: Proxy ExposedModule -> Structure Source #
structureHash' :: Tagged ExposedModule MD5
Instance details
Defined in Distribution.Types.Flag
Methods
structure :: Proxy FlagAssignment -> Structure Source #
structureHash' :: Tagged FlagAssignment MD5
Instance details
Defined in Distribution.Types.Flag
Instance details
Defined in Distribution.Types.Flag
Methods
structure :: Proxy PackageFlag -> Structure Source #
structureHash' :: Tagged PackageFlag MD5
Instance details
Defined in Distribution.Types.ForeignLib
Instance details
Defined in Distribution.Types.ForeignLib
Methods
structure :: Proxy LibVersionInfo -> Structure Source #
structureHash' :: Tagged LibVersionInfo MD5
Instance details
Defined in Distribution.Types.ForeignLibOption
Methods
structure :: Proxy ForeignLibOption -> Structure Source #
structureHash' :: Tagged ForeignLibOption MD5
Instance details
Defined in Distribution.Types.ForeignLibType
Methods
structure :: Proxy ForeignLibType -> Structure Source #
structureHash' :: Tagged ForeignLibType MD5
Instance details
Defined in Distribution.Types.GenericPackageDescription
Methods
structure :: Proxy GenericPackageDescription -> Structure Source #
structureHash' :: Tagged GenericPackageDescription MD5
Instance details
Defined in Distribution.Types.IncludeRenaming
Methods
structure :: Proxy IncludeRenaming -> Structure Source #
structureHash' :: Tagged IncludeRenaming MD5
Instance details
Defined in Distribution.Types.InstalledPackageInfo
Methods
structure :: Proxy InstalledPackageInfo -> Structure Source #
structureHash' :: Tagged InstalledPackageInfo MD5
Instance details
Defined in Distribution.Types.LegacyExeDependency
Methods
structure :: Proxy LegacyExeDependency -> Structure Source #
structureHash' :: Tagged LegacyExeDependency MD5
Instance details
Defined in Distribution.Types.Library
Instance details
Defined in Distribution.Types.LibraryName
Methods
structure :: Proxy LibraryName -> Structure Source #
structureHash' :: Tagged LibraryName MD5
Instance details
Defined in Distribution.Types.LibraryVisibility
Methods
structure :: Proxy LibraryVisibility -> Structure Source #
structureHash' :: Tagged LibraryVisibility MD5
Instance details
Defined in Distribution.Types.Mixin
Instance details
Defined in Distribution.Types.Module
Instance details
Defined in Distribution.Types.ModuleReexport
Methods
structure :: Proxy ModuleReexport -> Structure Source #
structureHash' :: Tagged ModuleReexport MD5
Instance details
Defined in Distribution.Types.ModuleRenaming
Methods
structure :: Proxy ModuleRenaming -> Structure Source #
structureHash' :: Tagged ModuleRenaming MD5
Instance details
Defined in Distribution.Types.MungedPackageId
Methods
structure :: Proxy MungedPackageId -> Structure Source #
structureHash' :: Tagged MungedPackageId MD5
Instance details
Defined in Distribution.Types.MungedPackageName
Methods
structure :: Proxy MungedPackageName -> Structure Source #
structureHash' :: Tagged MungedPackageName MD5
Instance details
Defined in Distribution.Types.PackageDescription
Methods
structure :: Proxy PackageDescription -> Structure Source #
structureHash' :: Tagged PackageDescription MD5
Instance details
Defined in Distribution.Types.PackageId
Methods
structure :: Proxy PackageIdentifier -> Structure Source #
structureHash' :: Tagged PackageIdentifier MD5
Instance details
Defined in Distribution.Types.PackageName
Methods
structure :: Proxy PackageName -> Structure Source #
structureHash' :: Tagged PackageName MD5
Instance details
Defined in Distribution.Types.PackageVersionConstraint
Methods
structure :: Proxy PackageVersionConstraint -> Structure Source #
structureHash' :: Tagged PackageVersionConstraint MD5
Instance details
Defined in Distribution.Types.PkgconfigDependency
Methods
structure :: Proxy PkgconfigDependency -> Structure Source #
structureHash' :: Tagged PkgconfigDependency MD5
Instance details
Defined in Distribution.Types.PkgconfigName
Methods
structure :: Proxy PkgconfigName -> Structure Source #
structureHash' :: Tagged PkgconfigName MD5
Instance details
Defined in Distribution.Types.PkgconfigVersion
Methods
structure :: Proxy PkgconfigVersion -> Structure Source #
structureHash' :: Tagged PkgconfigVersion MD5
Instance details
Defined in Distribution.Types.PkgconfigVersionRange
Methods
structure :: Proxy PkgconfigVersionRange -> Structure Source #
structureHash' :: Tagged PkgconfigVersionRange MD5
Instance details
Defined in Distribution.Types.SetupBuildInfo
Methods
structure :: Proxy SetupBuildInfo -> Structure Source #
structureHash' :: Tagged SetupBuildInfo MD5
Instance details
Defined in Distribution.Types.SourceRepo
Methods
structure :: Proxy KnownRepoType -> Structure Source #
structureHash' :: Tagged KnownRepoType MD5
Instance details
Defined in Distribution.Types.SourceRepo
Instance details
Defined in Distribution.Types.SourceRepo
Instance details
Defined in Distribution.Types.SourceRepo
Instance details
Defined in Distribution.Types.TestSuite
Instance details
Defined in Distribution.Types.TestSuiteInterface
Methods
structure :: Proxy TestSuiteInterface -> Structure Source #
structureHash' :: Tagged TestSuiteInterface MD5
Instance details
Defined in Distribution.Types.TestType
Instance details
Defined in Distribution.Types.UnitId
Instance details
Defined in Distribution.Types.UnitId
Instance details
Defined in Distribution.Types.UnqualComponentName
Methods
structure :: Proxy UnqualComponentName -> Structure Source #
structureHash' :: Tagged UnqualComponentName MD5
Instance details
Defined in Distribution.Types.Version
Instance details
Defined in Distribution.Types.VersionRange.Internal
Methods
structure :: Proxy VersionRange -> Structure Source #
structureHash' :: Tagged VersionRange MD5
Instance details
Defined in Distribution.Utils.ShortText
Instance details
Defined in Language.Haskell.Extension
Instance details
Defined in Language.Haskell.Extension
Methods
structure :: Proxy KnownExtension -> Structure Source #
structureHash' :: Tagged KnownExtension MD5
Instance details
Defined in Language.Haskell.Extension
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Methods
structure :: Proxy NominalDiffTime -> Structure Source #
structureHash' :: Tagged NominalDiffTime MD5
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Methods
structure :: Proxy UniversalTime -> Structure Source #
structureHash' :: Tagged UniversalTime MD5
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Compat.Graph
Instance details
Defined in Distribution.Compat.NonEmptySet
Methods
structure :: Proxy (NonEmptySet a) -> Structure Source #
structureHash' :: Tagged (NonEmptySet a) MD5
Instance details
Defined in Distribution.Compat.Semigroup
Instance details
Defined in Distribution.Compat.Semigroup
Instance details
Defined in Distribution.Compiler
Methods
structure :: Proxy (PerCompilerFlavor a) -> Structure Source #
structureHash' :: Tagged (PerCompilerFlavor a) MD5
Instance details
Defined in Distribution.Types.Condition
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Types.CondTree
Methods
structure :: Proxy (CondBranch v c a) -> Structure Source #
structureHash' :: Tagged (CondBranch v c a) MD5
Instance details
Defined in Distribution.Types.CondTree
Instance details
Defined in Distribution.Utils.Path
Methods
structure :: Proxy (SymbolicPathX allowAbsolute from to) -> Structure Source #
structureHash' :: Tagged (SymbolicPathX allowAbsolute from to) MD5
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
type MD5 = Fingerprint Source #
structureHash :: Structured a => Proxy a -> MD5 Source #
Semantically .hashStructure . structure
structureBuilder :: Structure -> Builder Source #
genericStructure :: (Typeable a, Generic a, GStructured (Rep a)) => Proxy a -> Structure Source #
Derive structure generically.
class GStructured (f :: Type -> Type) Source #
Used to implement genericStructure .
Minimal complete definition
gstructured
Instances
Instances details
Instance details
Defined in Distribution.Utils.Structured
Methods
gstructured :: TypeRep -> Proxy (M1 i c f) -> TypeVersion -> Structure
nominalStructure :: forall {k} (a :: k). Typeable a => Proxy a -> Structure Source #
Use Typeable to infer name
containerStructure :: forall {k} (f :: Type -> k) a. (Typeable f, Structured a) => Proxy (f a) -> Structure Source #
Structure type
Structure of a datatype.
It can be infinite, as far as TypeRep s involved are finite.
(e.g. polymorphic recursion might cause troubles).
Constructors
nominal, yet can be parametrised by other structures.
Instances
Instances details
Instance details
Defined in Distribution.Utils.Structured
Associated Types
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Instance details
Defined in Distribution.Utils.Structured
Constructors
type ConstructorName = String Source #
type TypeVersion = Word32 Source #
A semantic version of a data type. Usually 0.
type SopStructure = [(ConstructorName, [Structure])] Source #
typeVersion :: Functor f => (TypeVersion -> f TypeVersion) -> Structure -> f Structure Source #
A van-Laarhoven lens into TypeVersion of Structure
typeVersion:: Lens'StructureTypeVersion