<3%      !"#$(C) 2015 Oleg GrenrusBSD3"Oleg Grenrus <oleg.grenrus@iki.fi>None!"&'(+-./0134579>IKLN3 Interleaving k3 | 9 . . . . 2 | 5 8 . . . 1 | 2 4 7 11 . 0 | 0 1 3 6 10 ----------------- 0 1 2 3 4This can be calculated by f x y = sum ([0..x+y]) + yA helper type family for encodeTaggedFile and decodeTaggedFile.The default definition is  a = 0Type class providing  for each data type.For regular non-recursive ADTs  can be derived generically. ndata Record = Record { a :: Int, b :: Bool, c :: [Char] } deriving (Generic) instance hasStructuralInfo Record0For stable types, you can provide only type name instance HasStructuralInfo Int where structuralInfo = ghcNominalType -- infer name from Generic information instance HasStructuralInfo Integer where structuralInfo _ = NominalType "Integer"SRecursive type story is a bit sad atm. If the type structure is stable, you can do: _instance HasStructuralInfo a => HasStructuralInfo [a] where structuralInfo = ghcStructuralInfo15Data type structure, with (some) nominal information. -Type the semantic version is serialised with. %R serialisable class, which tries to be less error-prone to data structure changes.8Values are serialised with header consisting of version v and hash of .Tagged version of &Tagged version of 'Tagged version of (Tagged version of )Tagged version of *Tagged version of +,Since binary-tagged-0.1.4.0-Since binary-tagged-0.1.4.0.Since binary-tagged-0.1.4.0/Since binary-tagged-0.1.4.00Since binary-tagged-0.1.4.01Since binary-tagged-0.1.4.02Since binary-tagged-0.1.4.03Since binary-tagged-0.1.4.04Since binary-tagged-0.1.4.05Since binary-tagged-0.1.4.06Since binary-tagged-0.1.4.07Since binary-tagged-0.1.4.08Since binary-tagged-0.1.4.09Since binary-tagged-0.1.4.0:Since binary-tagged-0.1.4.0;Since binary-tagged-0.1.4.0<Since binary-tagged-0.1.4.0=Since binary-tagged-0.1.4.0>Since binary-tagged-0.1.4.0?Since binary-tagged-0.1.4.0@Since binary-tagged-0.1.4.0ASince binary-tagged-0.1.4.0BSince binary-tagged-0.1.4.0CSince binary-tagged-0.1.4.0DSince binary-tagged-0.1.3.0ESince binary-tagged-0.1.3.0FSince binary-tagged-0.1.3.0GSince binary-tagged-0.1.3.0HSince binary-tagged-0.1.3.0ISince binary-tagged-0.1.3.0JSince binary-tagged-0.1.3.0KSince binary-tagged-0.1.3.0LSince binary-tagged-0.1.3.0MSince binary-tagged-0.1.3.0NSince binary-tagged-0.1.3.0OSince binary-tagged-0.1.3.0PSince binary-tagged-0.1.3.0QSince binary-tagged-0.1.3.0R=Version and structure hash are prepended to serialised stream  STUV!"#$WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR%  !"#$%    !# "$  STUV!"#$WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR       !"#$%&'%()%(*%(+%(,%(-%(./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~binar_Ev6UYPIw5qNFnbraxQobxCData.Binary.TaggedDiv2SumUpTo InterleaveHasSemanticVersionSemanticVersionHasStructuralInfostructuralInfoStructuralInfo NominalTypeNominalNewtypeVersion BinaryTagged' BinaryTaggedunBinaryTagged binaryTag binaryTag' binaryUntag binaryUntag' taggedEncode taggedDecodetaggedDecodeOrFailtaggedEncodeFiletaggedDecodeFiletaggedDecodeFileOrFailstructuralInfoSha1Digest"structuralInfoSha1ByteStringDigestghcStructuralInfoghcNominalTypeghcStructuralInfo1sopStructuralInfosopStructuralInfoSsopNominalTypesopNominalTypeSsopStructuralInfo1sopStructuralInfo1Sbinar_3uXFWMoAGBg0xKP9MHKRwiData.Binary.ClassBinary Data.Binaryencodedecode decodeOrFail encodeFile decodeFiledecodeFileOrFail$fHasSemanticVersionNatural$fHasStructuralInfoNatural$fHasSemanticVersionOption$fHasStructuralInfoOption!$fHasSemanticVersionWrappedMonoid $fHasStructuralInfoWrappedMonoid$fHasSemanticVersionLast$fHasStructuralInfoLast$fHasSemanticVersionFirst$fHasStructuralInfoFirst$fHasSemanticVersionMax$fHasStructuralInfoMax$fHasSemanticVersionMin$fHasStructuralInfoMin$fHasSemanticVersionAny$fHasStructuralInfoAny$fHasSemanticVersionAll$fHasStructuralInfoAll$fHasSemanticVersionLast0$fHasStructuralInfoLast0$fHasSemanticVersionFirst0$fHasStructuralInfoFirst0$fHasSemanticVersionDual$fHasStructuralInfoDual$fHasSemanticVersionVersion$fHasStructuralInfoVersion$fHasSemanticVersionFixed$fHasStructuralInfoFixed$fHasSemanticVersion()$fHasStructuralInfo()$fHasSemanticVersion(,,,)$fHasSemanticVersion(,,)$fHasSemanticVersionDouble$fHasSemanticVersionFloat$fHasStructuralInfoDouble$fHasStructuralInfoFloat$fHasSemanticVersionOrdering$fHasStructuralInfoOrdering$fBinaryBinaryTaggedsopNominalNewtypesopNominalAdtPOP sopNominalAdtsopStructuralInfoP datatypeName$fHasSemanticVersionValue$fHasStructuralInfoValue$fHasSemanticVersionLocalTime$fHasSemanticVersionTimeOfDay$fHasSemanticVersionTimeZone$fHasSemanticVersionDay#$fHasSemanticVersionNominalDiffTime!$fHasSemanticVersionUniversalTime$fHasSemanticVersionDiffTime$fHasSemanticVersionUTCTime$fHasStructuralInfoLocalTime$fHasStructuralInfoTimeOfDay$fHasStructuralInfoTimeZone$fHasStructuralInfoDay"$fHasStructuralInfoNominalDiffTime $fHasStructuralInfoUniversalTime$fHasStructuralInfoDiffTime$fHasStructuralInfoUTCTime$fHasSemanticVersionVector$fHasStructuralInfoVector$fHasSemanticVersionVector0$fHasStructuralInfoVector0$fHasSemanticVersionVector1$fHasStructuralInfoVector1$fHasSemanticVersionUArray$fHasStructuralInfoUArray$fHasSemanticVersionArray$fHasStructuralInfoArray$fHasSemanticVersionHashSet$fHasStructuralInfoHashSet$fHasSemanticVersionHashMap$fHasStructuralInfoHashMap$fHasSemanticVersionSet$fHasStructuralInfoSet$fHasSemanticVersionSeq$fHasStructuralInfoSeq$fHasSemanticVersionMap$fHasStructuralInfoMap$fHasSemanticVersionIntSet$fHasStructuralInfoIntSet$fHasSemanticVersionIntMap$fHasStructuralInfoIntMap$fHasSemanticVersionText$fHasSemanticVersionText0$fHasStructuralInfoText$fHasStructuralInfoText0$fHasSemanticVersionByteString$fHasSemanticVersionByteString0$fHasStructuralInfoByteString$fHasStructuralInfoByteString0$fHasSemanticVersionProduct$fHasStructuralInfoProduct$fHasSemanticVersionSum$fHasStructuralInfoSum$fHasStructuralInfoE12$fHasStructuralInfoE9$fHasStructuralInfoE6$fHasStructuralInfoE3$fHasStructuralInfoE2$fHasStructuralInfoE1$fHasStructuralInfoE0$fHasSemanticVersion(,)$fHasStructuralInfo(,,,)$fHasStructuralInfo(,,)$fHasStructuralInfo(,)$fHasSemanticVersionEither$fHasStructuralInfoEither$fHasSemanticVersionRatio$fHasStructuralInfoRatio$fHasSemanticVersionMaybe$fHasStructuralInfoMaybe$fHasSemanticVersionNonEmpty$fHasStructuralInfoNonEmpty$fHasSemanticVersion[]$fHasStructuralInfo[]$fHasSemanticVersionWord64$fHasSemanticVersionWord32$fHasSemanticVersionWord16$fHasSemanticVersionWord8$fHasSemanticVersionInt64$fHasSemanticVersionInt32$fHasSemanticVersionInt16$fHasSemanticVersionInt8$fHasSemanticVersionInteger$fHasSemanticVersionWord$fHasSemanticVersionInt$fHasSemanticVersionChar$fHasSemanticVersionBool$fHasStructuralInfoWord64$fHasStructuralInfoWord32$fHasStructuralInfoWord16$fHasStructuralInfoWord8$fHasStructuralInfoInt64$fHasStructuralInfoInt32$fHasStructuralInfoInt16$fHasStructuralInfoInt8$fHasStructuralInfoInteger$fHasStructuralInfoWord$fHasStructuralInfoInt$fHasStructuralInfoChar$fHasStructuralInfoBool"$fHasSemanticVersionStructuralInfo!$fHasStructuralInfoStructuralInfo$fBinaryStructuralInfo$fMonoidBinaryTagged$fMonadBinaryTagged$fApplicativeBinaryTagged