Structured encode. Encode a value to using binary serialisation to a lazy ByteString. Encoding starts with 16 byte large structure hash.
ModuleCabal-syntax-3.12.1.0Haskell2010
Distribution.Utils.Structured
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
structuredEncode record :: ByteString
structuredDecode lbs :: 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.
- 7 types
- 2 classes
- 13 values
- PackageCabal-syntax-3.12.1.0
- Exports22
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceStructured.hs
Encoding and decoding
5 declarationsThese functions operate like binary's counterparts,
but the serialised version has a structure hash in front.
Lazily serialise a value to a file
Structured decode. Decode a value from a lazy ByteString, reconstructing the original structure. Throws pure exception on invalid inputs.
Lazily reconstruct a value previously written to a file.
Structured class
8 declarationsClass 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
Instances134Structured, …
Structured OpenModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.BackpackStructured OpenUnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.BackpackStructured CabalSpecVersionDefined in Cabal-syntax-3.12.1.0 · Distribution.CabalSpecVersionStructured AbiTagDefined in Cabal-syntax-3.12.1.0 · Distribution.CompilerStructured CompilerFlavorDefined in Cabal-syntax-3.12.1.0 · Distribution.CompilerStructured CompilerIdDefined in Cabal-syntax-3.12.1.0 · Distribution.CompilerStructured LicenseDefined in Cabal-syntax-3.12.1.0 · Distribution.LicenseStructured ModuleNameDefined in Cabal-syntax-3.12.1.0 · Distribution.ModuleNameStructured LicenseDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseStructured LicenseExceptionIdDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExceptionIdStructured LicenseExpressionDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExpressionStructured SimpleLicenseExpressionDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExpressionStructured LicenseIdDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseIdStructured LicenseRefDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseReferenceStructured ArchDefined in Cabal-syntax-3.12.1.0 · Distribution.SystemStructured OSDefined in Cabal-syntax-3.12.1.0 · Distribution.SystemStructured PlatformDefined in Cabal-syntax-3.12.1.0 · Distribution.SystemStructured AbiDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.AbiDependencyStructured AbiHashDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.AbiHashStructured BenchmarkDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BenchmarkStructured BenchmarkInterfaceDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BenchmarkInterfaceStructured BenchmarkTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BenchmarkTypeStructured BuildInfoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BuildInfoStructured BuildTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BuildTypeStructured ComponentDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentStructured ComponentIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentIdStructured ComponentNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentNameStructured NotLibComponentNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentNameStructured ComponentRequestedSpecDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentRequestedSpecStructured ConfVarDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ConfVarStructured DependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.DependencyStructured ExeDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExeDependencyStructured ExecutableDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExecutableStructured ExecutableScopeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExecutableScopeStructured ExposedModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExposedModuleStructured FlagAssignmentDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.FlagStructured FlagNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.FlagStructured PackageFlagDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.FlagStructured ForeignLibDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibStructured LibVersionInfoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibStructured ForeignLibOptionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibOptionStructured ForeignLibTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibTypeStructured GenericPackageDescriptionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.GenericPackageDescriptionStructured IncludeRenamingDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.IncludeRenamingStructured InstalledPackageInfoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.InstalledPackageInfoStructured LegacyExeDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LegacyExeDependencyStructured LibraryDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LibraryStructured LibraryNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LibraryNameStructured LibraryVisibilityDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LibraryVisibilityStructured MixinDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.MixinStructured ModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ModuleStructured ModuleReexportDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ModuleReexportStructured ModuleRenamingDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ModuleRenamingStructured MungedPackageIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.MungedPackageIdStructured MungedPackageNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.MungedPackageNameStructured PackageDescriptionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageDescriptionStructured PackageIdentifierDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageIdStructured PackageNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageNameStructured PackageVersionConstraintDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageVersionConstraintStructured PkgconfigDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigDependencyStructured PkgconfigNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigNameStructured PkgconfigVersionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigVersionStructured PkgconfigVersionRangeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigVersionRangeStructured SetupBuildInfoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SetupBuildInfoStructured KnownRepoTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepoStructured RepoKindDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepoStructured RepoTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepoStructured SourceRepoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepoStructured TestSuiteDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.TestSuiteStructured TestSuiteInterfaceDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.TestSuiteInterfaceStructured TestTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.TestTypeStructured DefUnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnitIdStructured UnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnitIdStructured UnqualComponentNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnqualComponentNameStructured VersionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.VersionStructured VersionRangeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.VersionRange.InternalStructured ShortTextDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.ShortTextStructured ExtensionDefined in Cabal-syntax-3.12.1.0 · Language.Haskell.ExtensionStructured KnownExtensionDefined in Cabal-syntax-3.12.1.0 · Language.Haskell.ExtensionStructured LanguageDefined in Cabal-syntax-3.12.1.0 · Language.Haskell.ExtensionStructured ByteStringDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured ByteStringDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured IntSetDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured IntegerDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Int16Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Int32Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Int64Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Int8Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Word16Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Word32Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Word64Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured Word8Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured BoolDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured CharDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured DoubleDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured FloatDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured IntDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured OrderingDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured WordDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured TextDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured TextDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured DayDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured DiffTimeDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured NominalDiffTimeDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured UTCTimeDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured UniversalTimeDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured LocalTimeDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured TimeOfDayDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured TimeZoneDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured ()Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured a => Structured (Graph a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Compat.GraphStructured a => Structured (NonEmptySet a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Compat.NonEmptySetStructured a => Structured (Last' a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Compat.SemigroupStructured a => Structured (Option' a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Compat.SemigroupStructured a => Structured (PerCompilerFlavor a)Defined in Cabal-syntax-3.12.1.0 · Distribution.CompilerStructured a => Structured (NonEmpty a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured a => Structured (Maybe a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured a => Structured (Ratio a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured a => Structured [a]Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured c => Structured (Condition c)Defined in Cabal-syntax-3.12.1.0 · Distribution.Types.ConditionStructured k => Structured (Set k)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured v => Structured (IntMap v)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredStructured v => Structured (Seq v)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured a, Structured b) => Structured (Either a b)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured a1, Structured a2) => Structured (a1, a2)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured k, Structured v) => Structured (Map k v)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Typeable from, Typeable to) => Structured (SymbolicPath from to)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Path(Structured a1, Structured a2, Structured a3) => Structured (a1, a2, a3)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured v, Structured c, Structured a) => Structured (CondBranch v c a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Types.CondTree(Structured v, Structured c, Structured a) => Structured (CondTree v c a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Types.CondTree(Structured a1, Structured a2, Structured a3, Structured a4) => Structured (a1, a2, a3, a4)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured a1, Structured a2, Structured a3, Structured a4, Structured a5) => Structured (a1, a2, a3, a4, a5)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured a1, Structured a2, Structured a3, Structured a4, Structured a5, Structured a6) => Structured (a1, a2, a3, a4, a5, a6)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured(Structured a1, Structured a2, Structured a3, Structured a4, Structured a5, Structured a6, Structured a7) => Structured (a1, a2, a3, a4, a5, a6, a7)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured
Semantically hashStructure . structure.
Derive structure generically.
Used to implement genericStructure.
Instances1GStructured
(i ~ D, Datatype c, GStructuredSum f) => GStructured (M1 i c f)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured
Use Typeable to infer name
Structure type
9 declarationsStructure of a datatype.
It can be infinite, as far as TypeReps involved are finite. (e.g. polymorphic recursion might cause troubles).
Constructors
Nominal !TypeRep !TypeVersion TypeName [Structure]nominal, yet can be parametrised by other structures.
Newtype !TypeRep !TypeVersion TypeName Structurea newtype wrapper
Structure !TypeRep !TypeVersion TypeName SopStructuresum-of-products structure
Instances5Eq, Ord, Show, Generic, Rep
Eq StructureDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredOrd StructureDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredShow StructureDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.StructuredGeneric StructureDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structuredtype Rep Structure = D1 ('MetaDataDefined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured"Structure"
"Distribution.Utils.Structured"
"Cabal-syntax-3.12.1.0-3adc"
'False) (C1 ('MetaCons"Nominal"
'PrefixI 'False) ((S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TypeRep) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 TypeVersion)) :*: (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TypeName) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Structure]))) :+: (C1 ('MetaCons"Newtype"
'PrefixI 'False) ((S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TypeRep) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 TypeVersion)) :*: (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TypeName) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Structure))) :+: C1 ('MetaCons"Structure"
'PrefixI 'False) ((S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TypeRep) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 TypeVersion)) :*: (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TypeName) :*: S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SopStructure)))))
Instances1Binary
Structured a => Binary (Tag a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Structured
A semantic version of a data type. Usually 0.
A MD5 hash digest of Structure.
A van-Laarhoven lens into TypeVersion of Structure
typeVersion :: Lens' Structure TypeVersion