packages feed

bytezap 1.1.0 → 1.3.0

raw patch · 13 files changed

+497/−457 lines, 13 filesdep +defun-coredep +generic-type-functionsdep +type-level-bytestringsPVP ok

version bump matches the API change (PVP)

Dependencies added: defun-core, generic-type-functions, type-level-bytestrings

API changes (from Hackage documentation)

- Bytezap.Struct.Generic: instance forall k1 k2 (idx :: k1) (f :: k2 -> GHC.Types.Type) (c :: GHC.Generics.Meta). Bytezap.Struct.Generic.GPoke idx f => Bytezap.Struct.Generic.GPoke idx (GHC.Generics.C1 c f)
- Bytezap.Struct.Generic: instance forall k1 k2 (idx :: k1) (f :: k2 -> GHC.Types.Type) (c :: GHC.Generics.Meta). Bytezap.Struct.Generic.GPoke idx f => Bytezap.Struct.Generic.GPoke idx (GHC.Generics.D1 c f)
- Bytezap.Struct.Generic: instance forall k1 k2 (idx :: k1) (l :: k2 -> GHC.Types.Type) (r :: k2 -> GHC.Types.Type). (Bytezap.Struct.Generic.GPoke idx l, Bytezap.Struct.Generic.GPoke idx r, Bytezap.Struct.Generic.GPokeBase idx, Bytezap.Struct.Generic.KnownSizeOf' idx (Bytezap.Struct.Generic.UnwrapGenericS1 l)) => Bytezap.Struct.Generic.GPoke idx (l GHC.Generics.:*: r)
- Bytezap.Struct.Generic: instance forall k1 k2 (idx :: k1) a (c :: GHC.Generics.Meta). (Bytezap.Struct.Generic.GPokeBase idx, Bytezap.Struct.Generic.GPokeBaseC idx a) => Bytezap.Struct.Generic.GPoke idx (GHC.Generics.S1 c (GHC.Generics.Rec0 a))
- Bytezap.Struct.Generic: instance forall k1 k2 (idx :: k1). Bytezap.Struct.Generic.GPoke idx GHC.Generics.U1
- Bytezap.Struct.Generic: sizeOf' :: forall a. (GPokeBase idx, KnownSizeOf' idx a) => Proxy# a -> Int#
- Bytezap.Struct.Generic: type KnownSizeOf' idx a :: Constraint;
- Bytezap.Struct.Generic: type family UnwrapGenericS1 a
- Bytezap.Struct.TypeLits: class ReifyBytesW16 (ns :: [Natural])
- Bytezap.Struct.TypeLits: class ReifyBytesW32 (ns :: [Natural])
- Bytezap.Struct.TypeLits: class ReifyBytesW64 (ns :: [Natural])
- Bytezap.Struct.TypeLits: class ReifyBytesW8 (ns :: [Natural])
- Bytezap.Struct.TypeLits: instance (Raehik.TypeLevelBytes.ReifyW8 n1, Bytezap.Struct.TypeLits.ReifyBytesW8 ns) => Bytezap.Struct.TypeLits.ReifyBytesW8 (n1 : ns)
- Bytezap.Struct.TypeLits: instance (Raehik.TypeLevelBytes.ReifyW8 n1, Raehik.TypeLevelBytes.ReifyW8 n2, Bytezap.Struct.TypeLits.ReifyBytesW16 ns) => Bytezap.Struct.TypeLits.ReifyBytesW16 (n1 : n2 : ns)
- Bytezap.Struct.TypeLits: instance (Raehik.TypeLevelBytes.ReifyW8 n1, Raehik.TypeLevelBytes.ReifyW8 n2, Raehik.TypeLevelBytes.ReifyW8 n3, Raehik.TypeLevelBytes.ReifyW8 n4, Bytezap.Struct.TypeLits.ReifyBytesW32 ns) => Bytezap.Struct.TypeLits.ReifyBytesW32 (n1 : n2 : n3 : n4 : ns)
- Bytezap.Struct.TypeLits: instance (Raehik.TypeLevelBytes.ReifyW8 n1, Raehik.TypeLevelBytes.ReifyW8 n2, Raehik.TypeLevelBytes.ReifyW8 n3, Raehik.TypeLevelBytes.ReifyW8 n4, Raehik.TypeLevelBytes.ReifyW8 n5, Raehik.TypeLevelBytes.ReifyW8 n6, Raehik.TypeLevelBytes.ReifyW8 n7, Raehik.TypeLevelBytes.ReifyW8 n8, Bytezap.Struct.TypeLits.ReifyBytesW64 ns) => Bytezap.Struct.TypeLits.ReifyBytesW64 (n1 : n2 : n3 : n4 : n5 : n6 : n7 : n8 : ns)
- Bytezap.Struct.TypeLits: instance Bytezap.Struct.TypeLits.ReifyBytesW16 ns => Bytezap.Struct.TypeLits.ReifyBytesW32 ns
- Bytezap.Struct.TypeLits: instance Bytezap.Struct.TypeLits.ReifyBytesW32 ns => Bytezap.Struct.TypeLits.ReifyBytesW64 ns
- Bytezap.Struct.TypeLits: instance Bytezap.Struct.TypeLits.ReifyBytesW8 '[]
- Bytezap.Struct.TypeLits: instance Bytezap.Struct.TypeLits.ReifyBytesW8 ns => Bytezap.Struct.TypeLits.ReifyBytesW16 ns
- Bytezap.Struct.TypeLits: reifyBytesW16 :: ReifyBytesW16 ns => Poke s
- Bytezap.Struct.TypeLits: reifyBytesW32 :: ReifyBytesW32 ns => Poke s
- Bytezap.Struct.TypeLits: reifyBytesW64 :: ReifyBytesW64 ns => Poke n
- Bytezap.Struct.TypeLits: reifyBytesW8 :: ReifyBytesW8 ns => Poke s
- Raehik.TypeLevelBytes: class ReifyW8 (n :: Natural)
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 0
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 1
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 10
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 100
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 101
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 102
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 103
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 104
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 105
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 106
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 107
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 108
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 109
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 11
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 110
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 111
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 112
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 113
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 114
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 115
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 116
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 117
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 118
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 119
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 12
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 120
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 121
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 122
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 123
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 124
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 125
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 126
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 127
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 128
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 129
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 13
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 130
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 131
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 132
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 133
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 134
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 135
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 136
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 137
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 138
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 139
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 14
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 140
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 141
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 142
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 143
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 144
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 145
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 146
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 147
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 148
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 149
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 15
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 150
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 151
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 152
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 153
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 154
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 155
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 156
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 157
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 158
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 159
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 16
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 160
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 161
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 162
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 163
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 164
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 165
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 166
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 167
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 168
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 169
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 17
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 170
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 171
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 172
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 173
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 174
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 175
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 176
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 177
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 178
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 179
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 18
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 180
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 181
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 182
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 183
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 184
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 185
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 186
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 187
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 188
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 189
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 19
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 190
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 191
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 192
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 193
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 194
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 195
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 196
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 197
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 198
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 199
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 2
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 20
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 200
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 201
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 202
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 203
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 204
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 205
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 206
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 207
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 208
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 209
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 21
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 210
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 211
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 212
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 213
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 214
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 215
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 216
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 217
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 218
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 219
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 22
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 220
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 221
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 222
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 223
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 224
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 225
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 226
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 227
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 228
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 229
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 23
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 230
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 231
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 232
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 233
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 234
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 235
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 236
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 237
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 238
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 239
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 24
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 240
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 241
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 242
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 243
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 244
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 245
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 246
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 247
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 248
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 249
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 25
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 250
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 251
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 252
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 253
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 254
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 255
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 26
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 27
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 28
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 29
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 3
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 30
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 31
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 32
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 33
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 34
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 35
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 36
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 37
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 38
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 39
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 4
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 40
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 41
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 42
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 43
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 44
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 45
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 46
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 47
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 48
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 49
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 5
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 50
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 51
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 52
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 53
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 54
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 55
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 56
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 57
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 58
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 59
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 6
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 60
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 61
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 62
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 63
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 64
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 65
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 66
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 67
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 68
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 69
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 7
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 70
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 71
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 72
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 73
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 74
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 75
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 76
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 77
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 78
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 79
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 8
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 80
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 81
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 82
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 83
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 84
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 85
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 86
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 87
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 88
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 89
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 9
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 90
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 91
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 92
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 93
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 94
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 95
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 96
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 97
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 98
- Raehik.TypeLevelBytes: instance Raehik.TypeLevelBytes.ReifyW8 99
- Raehik.TypeLevelBytes: reifyW16 :: forall n1 n2. (ReifyW8 n1, ReifyW8 n2) => Word16
- Raehik.TypeLevelBytes: reifyW32 :: forall n1 n2 n3 n4. (ReifyW8 n1, ReifyW8 n2, ReifyW8 n3, ReifyW8 n4) => Word32
- Raehik.TypeLevelBytes: reifyW64 :: forall n1 n2 n3 n4 n5 n6 n7 n8. (ReifyW8 n1, ReifyW8 n2, ReifyW8 n3, ReifyW8 n4, ReifyW8 n5, ReifyW8 n6, ReifyW8 n7, ReifyW8 n8) => Word64
- Raehik.TypeLevelBytes: reifyW8 :: ReifyW8 n => Word8
+ Bytezap.Common.Generic: data PlusSym f
+ Bytezap.Common.Generic: data PlusSym1 l r
+ Bytezap.Common.Generic: type GTFoldMapCAddition f gf = GTFoldMapC PlusSym 0 f gf
+ Bytezap.Parser.Struct: Err :: !e -> Result e a
+ Bytezap.Parser.Struct: Fail :: Result e a
+ Bytezap.Parser.Struct: OK :: a -> Result e a
+ Bytezap.Parser.Struct: ParserT :: ParserT# st e a -> ParserT (st :: ZeroBitType) e a
+ Bytezap.Parser.Struct: [runParserT#] :: ParserT (st :: ZeroBitType) e a -> ParserT# st e a
+ Bytezap.Parser.Struct: constParse :: a -> ParserT st e a
+ Bytezap.Parser.Struct: data Result e a
+ Bytezap.Parser.Struct: instance (GHC.Show.Show a, GHC.Show.Show e) => GHC.Show.Show (Bytezap.Parser.Struct.Result e a)
+ Bytezap.Parser.Struct: instance GHC.Base.Functor (Bytezap.Parser.Struct.ParserT st e)
+ Bytezap.Parser.Struct: lit :: Eq a => a -> ParserT st e a -> ParserT st e ()
+ Bytezap.Parser.Struct: newtype ParserT (st :: ZeroBitType) e a
+ Bytezap.Parser.Struct: pattern Err# :: (st :: ZeroBitType) -> e -> Res# st e a
+ Bytezap.Parser.Struct: pattern Fail# :: (st :: ZeroBitType) -> Res# st e a
+ Bytezap.Parser.Struct: pattern OK# :: (st :: ZeroBitType) -> a -> Res# st e a
+ Bytezap.Parser.Struct: prim :: forall a st e. Prim' a => ParserT st e a
+ Bytezap.Parser.Struct: sequenceParsers :: Int -> (a -> b -> c) -> ParserT st e a -> ParserT st e b -> ParserT st e c
+ Bytezap.Parser.Struct: type IOMode = State# RealWorld
+ Bytezap.Parser.Struct: type Parser = ParserT PureMode
+ Bytezap.Parser.Struct: type ParserIO = ParserT IOMode
+ Bytezap.Parser.Struct: type ParserST s = ParserT (STMode s)
+ Bytezap.Parser.Struct: type ParserT# (st :: ZeroBitType) e a = ForeignPtrContents {-^ pointer provenance -} -> Addr# {-^ base address -} -> Int# {-^ cursor offset from base -} -> st {-^ state token -} -> Res# st e a
+ Bytezap.Parser.Struct: type PureMode = Proxy# Void
+ Bytezap.Parser.Struct: type Res# (st :: ZeroBitType) e a = (# st, ResI# e a #)
+ Bytezap.Parser.Struct: type ResI# e a = (# (# a #) | (# #) | (# e #) #)
+ Bytezap.Parser.Struct: type STMode s = State# s
+ Bytezap.Parser.Struct: unsafeRunParser' :: forall a e. Addr# -> ForeignPtrContents -> Parser e a -> Result e a
+ Bytezap.Parser.Struct: unsafeRunParserBs :: forall a e. ByteString -> Parser e a -> Result e a
+ Bytezap.Parser.Struct: unsafeRunParserFPtr :: forall a e. ForeignPtr Word8 -> Parser e a -> Result e a
+ Bytezap.Parser.Struct: unsafeRunParserPtr :: forall a e. Ptr Word8 -> Parser e a -> Result e a
+ Bytezap.Parser.Struct: withLit :: Eq a => Int# -> a -> ParserT st e a -> ParserT st e r -> ParserT st e r
+ Bytezap.Parser.Struct.Generic: -- <a>Natural</a>s. (Needed as we can't partially apply type families.)
+ Bytezap.Parser.Struct.Generic: -- | Defunctionalization symbol for a type family turning <a>Type</a>s into
+ Bytezap.Parser.Struct.Generic: class GParse tag gf
+ Bytezap.Parser.Struct.Generic: class GParseBase tag where {
+ Bytezap.Parser.Struct.Generic: gParse :: GParse tag gf => ParserT (GParseBaseSt tag) (GParseBaseE tag) (gf p)
+ Bytezap.Parser.Struct.Generic: gParseBase :: (GParseBase tag, GParseBaseC tag a) => ParserT (GParseBaseSt tag) (GParseBaseE tag) a
+ Bytezap.Parser.Struct.Generic: instance forall k1 k2 (tag :: k1) (gf :: k2 -> GHC.Types.Type) (cc :: GHC.Generics.Meta). Bytezap.Parser.Struct.Generic.GParse tag gf => Bytezap.Parser.Struct.Generic.GParse tag (GHC.Generics.C1 cc gf)
+ Bytezap.Parser.Struct.Generic: instance forall k1 k2 (tag :: k1) (gf :: k2 -> GHC.Types.Type) (cd :: GHC.Generics.Meta). Bytezap.Parser.Struct.Generic.GParse tag gf => Bytezap.Parser.Struct.Generic.GParse tag (GHC.Generics.D1 cd gf)
+ Bytezap.Parser.Struct.Generic: instance forall k1 k2 (tag :: k1) (l :: k2 -> GHC.Types.Type) (r :: k2 -> GHC.Types.Type) (lenL :: GHC.Num.Natural.Natural). (Bytezap.Parser.Struct.Generic.GParse tag l, Bytezap.Parser.Struct.Generic.GParse tag r, Bytezap.Parser.Struct.Generic.GParseBase tag, lenL GHC.Types.~ Bytezap.Common.Generic.GTFoldMapCAddition (Bytezap.Parser.Struct.Generic.GParseBaseLenTF tag) l, GHC.TypeNats.KnownNat lenL) => Bytezap.Parser.Struct.Generic.GParse tag (l GHC.Generics.:*: r)
+ Bytezap.Parser.Struct.Generic: instance forall k1 k2 (tag :: k1) a (c :: GHC.Generics.Meta). (Bytezap.Parser.Struct.Generic.GParseBase tag, Bytezap.Parser.Struct.Generic.GParseBaseC tag a) => Bytezap.Parser.Struct.Generic.GParse tag (GHC.Generics.S1 c (GHC.Generics.Rec0 a))
+ Bytezap.Parser.Struct.Generic: instance forall k1 k2 (tag :: k1). Bytezap.Parser.Struct.Generic.GParse tag GHC.Generics.U1
+ Bytezap.Parser.Struct.Generic: type GParseBaseC tag a :: Constraint;
+ Bytezap.Parser.Struct.Generic: type GParseBaseE tag :: Type;
+ Bytezap.Parser.Struct.Generic: type GParseBaseLenTF tag :: Type ~> Natural;
+ Bytezap.Parser.Struct.Generic: type GParseBaseSt tag :: ZeroBitType;
+ Bytezap.Parser.Struct.Generic: }
+ Bytezap.Parser.Struct.TypeLits.Bytes: class ParseReifyBytesW16 (ns :: [Natural])
+ Bytezap.Parser.Struct.TypeLits.Bytes: class ParseReifyBytesW32 (ns :: [Natural])
+ Bytezap.Parser.Struct.TypeLits.Bytes: class ParseReifyBytesW64 (ns :: [Natural])
+ Bytezap.Parser.Struct.TypeLits.Bytes: class ParseReifyBytesW8 (ns :: [Natural])
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW8 ns) => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW8 (n1 : ns)
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW16 ns) => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW16 (n1 : n2 : ns)
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Data.Type.Byte.ReifyW8 n3, Data.Type.Byte.ReifyW8 n4, Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW32 ns) => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW32 (n1 : n2 : n3 : n4 : ns)
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Data.Type.Byte.ReifyW8 n3, Data.Type.Byte.ReifyW8 n4, Data.Type.Byte.ReifyW8 n5, Data.Type.Byte.ReifyW8 n6, Data.Type.Byte.ReifyW8 n7, Data.Type.Byte.ReifyW8 n8, Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW64 ns) => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW64 (n1 : n2 : n3 : n4 : n5 : n6 : n7 : n8 : ns)
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW16 ns => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW32 ns
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW32 ns => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW64 ns
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW8 '[]
+ Bytezap.Parser.Struct.TypeLits.Bytes: instance Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW8 ns => Bytezap.Parser.Struct.TypeLits.Bytes.ParseReifyBytesW16 ns
+ Bytezap.Parser.Struct.TypeLits.Bytes: parseReifyBytesW16 :: ParseReifyBytesW16 ns => ParserT st e ()
+ Bytezap.Parser.Struct.TypeLits.Bytes: parseReifyBytesW32 :: ParseReifyBytesW32 ns => ParserT st e ()
+ Bytezap.Parser.Struct.TypeLits.Bytes: parseReifyBytesW64 :: ParseReifyBytesW64 ns => ParserT st e ()
+ Bytezap.Parser.Struct.TypeLits.Bytes: parseReifyBytesW8 :: ParseReifyBytesW8 ns => ParserT st e ()
+ Bytezap.Poke: toStructPoke :: Poke s -> Poke s
+ Bytezap.Struct.Generic: instance forall k1 k2 (tag :: k1) (f :: k2 -> GHC.Types.Type) (c :: GHC.Generics.Meta). Bytezap.Struct.Generic.GPoke tag f => Bytezap.Struct.Generic.GPoke tag (GHC.Generics.C1 c f)
+ Bytezap.Struct.Generic: instance forall k1 k2 (tag :: k1) (f :: k2 -> GHC.Types.Type) (c :: GHC.Generics.Meta). Bytezap.Struct.Generic.GPoke tag f => Bytezap.Struct.Generic.GPoke tag (GHC.Generics.D1 c f)
+ Bytezap.Struct.Generic: instance forall k1 k2 (tag :: k1) (l :: k2 -> GHC.Types.Type) (r :: k2 -> GHC.Types.Type) (lenL :: GHC.Num.Natural.Natural). (Bytezap.Struct.Generic.GPoke tag l, Bytezap.Struct.Generic.GPoke tag r, Bytezap.Struct.Generic.GPokeBase tag, lenL GHC.Types.~ Bytezap.Common.Generic.GTFoldMapCAddition (Bytezap.Struct.Generic.GPokeBaseLenTF tag) l, GHC.TypeNats.KnownNat lenL) => Bytezap.Struct.Generic.GPoke tag (l GHC.Generics.:*: r)
+ Bytezap.Struct.Generic: instance forall k1 k2 (tag :: k1) a (c :: GHC.Generics.Meta). (Bytezap.Struct.Generic.GPokeBase tag, Bytezap.Struct.Generic.GPokeBaseC tag a) => Bytezap.Struct.Generic.GPoke tag (GHC.Generics.S1 c (GHC.Generics.Rec0 a))
+ Bytezap.Struct.Generic: instance forall k1 k2 (tag :: k1). Bytezap.Struct.Generic.GPoke tag GHC.Generics.U1
+ Bytezap.Struct.Generic: type GPokeBaseLenTF tag :: Type ~> Natural;
+ Bytezap.Struct.TypeLits.Bytes: class ReifyBytesW16 (ns :: [Natural])
+ Bytezap.Struct.TypeLits.Bytes: class ReifyBytesW32 (ns :: [Natural])
+ Bytezap.Struct.TypeLits.Bytes: class ReifyBytesW64 (ns :: [Natural])
+ Bytezap.Struct.TypeLits.Bytes: class ReifyBytesW8 (ns :: [Natural])
+ Bytezap.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Bytezap.Struct.TypeLits.Bytes.ReifyBytesW8 ns) => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW8 (n1 : ns)
+ Bytezap.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Bytezap.Struct.TypeLits.Bytes.ReifyBytesW16 ns) => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW16 (n1 : n2 : ns)
+ Bytezap.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Data.Type.Byte.ReifyW8 n3, Data.Type.Byte.ReifyW8 n4, Bytezap.Struct.TypeLits.Bytes.ReifyBytesW32 ns) => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW32 (n1 : n2 : n3 : n4 : ns)
+ Bytezap.Struct.TypeLits.Bytes: instance (Data.Type.Byte.ReifyW8 n1, Data.Type.Byte.ReifyW8 n2, Data.Type.Byte.ReifyW8 n3, Data.Type.Byte.ReifyW8 n4, Data.Type.Byte.ReifyW8 n5, Data.Type.Byte.ReifyW8 n6, Data.Type.Byte.ReifyW8 n7, Data.Type.Byte.ReifyW8 n8, Bytezap.Struct.TypeLits.Bytes.ReifyBytesW64 ns) => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW64 (n1 : n2 : n3 : n4 : n5 : n6 : n7 : n8 : ns)
+ Bytezap.Struct.TypeLits.Bytes: instance Bytezap.Struct.TypeLits.Bytes.ReifyBytesW16 ns => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW32 ns
+ Bytezap.Struct.TypeLits.Bytes: instance Bytezap.Struct.TypeLits.Bytes.ReifyBytesW32 ns => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW64 ns
+ Bytezap.Struct.TypeLits.Bytes: instance Bytezap.Struct.TypeLits.Bytes.ReifyBytesW8 '[]
+ Bytezap.Struct.TypeLits.Bytes: instance Bytezap.Struct.TypeLits.Bytes.ReifyBytesW8 ns => Bytezap.Struct.TypeLits.Bytes.ReifyBytesW16 ns
+ Bytezap.Struct.TypeLits.Bytes: reifyBytesW16 :: ReifyBytesW16 ns => Poke s
+ Bytezap.Struct.TypeLits.Bytes: reifyBytesW32 :: ReifyBytesW32 ns => Poke s
+ Bytezap.Struct.TypeLits.Bytes: reifyBytesW64 :: ReifyBytesW64 ns => Poke s
+ Bytezap.Struct.TypeLits.Bytes: reifyBytesW8 :: ReifyBytesW8 ns => Poke s
+ Raehik.Compat.Data.Primitive.Types.Endian: instance GHC.Enum.Enum a => GHC.Enum.Enum (Raehik.Compat.Data.Primitive.Types.Endian.ByteOrdered end a)
+ Raehik.Compat.Data.Primitive.Types.Endian: instance GHC.Real.Integral a => GHC.Real.Integral (Raehik.Compat.Data.Primitive.Types.Endian.ByteOrdered end a)
+ Raehik.Compat.Data.Primitive.Types.Endian: instance GHC.Real.Real a => GHC.Real.Real (Raehik.Compat.Data.Primitive.Types.Endian.ByteOrdered end a)
- Bytezap.Struct.Generic: -- | The type class that provides poked length (known at compile time).
+ Bytezap.Struct.Generic: -- | The type class that provides base case poking.
- Bytezap.Struct.Generic: class GPoke idx f
+ Bytezap.Struct.Generic: class GPoke tag f
- Bytezap.Struct.Generic: class GPokeBase idx where {
+ Bytezap.Struct.Generic: class GPokeBase tag where {
- Bytezap.Struct.Generic: gPoke :: GPoke idx f => f p -> Poke# (GPokeBaseSt idx)
+ Bytezap.Struct.Generic: gPoke :: GPoke tag f => f p -> Poke# (GPokeBaseSt tag)
- Bytezap.Struct.Generic: gPokeBase :: (GPokeBase idx, GPokeBaseC idx a) => a -> Poke# (GPokeBaseSt idx)
+ Bytezap.Struct.Generic: gPokeBase :: (GPokeBase tag, GPokeBaseC tag a) => a -> Poke# (GPokeBaseSt tag)
- Bytezap.Struct.Generic: type GPokeBaseC idx a :: Constraint;
+ Bytezap.Struct.Generic: type GPokeBaseC tag a :: Constraint;
- Bytezap.Struct.Generic: type GPokeBaseSt idx;
+ Bytezap.Struct.Generic: type GPokeBaseSt tag;

Files

CHANGELOG.md view
@@ -1,3 +1,14 @@+## 1.3.0 (2024-04-13)+* move type-level byte stuff to another package++## 1.2.0 (2024-04-11)+* fix type-level generic blen type family (needed defunctionalization)+  * split out into its own even _more_ abstract library, generic-type-functions+* add missing instance `Integral (ByteOrdered end a)`+* add struct parser! design taken from flatparse. barebones combinators+  * add type-level byte parsing. hahahaha+* add `Bytezap.Poke.toStructPoke :: Poke s -> Struct.Poke s`+ ## 1.1.0 (2024-04-05) * add struct serializer * add type-level bytestring utilities (generalized from binrep)
README.md view
@@ -1,11 +1,12 @@+[hackage-binrep]: https://hackage.haskell.org/package/binrep+ # bytezap Build strict bytestrings with zero intermediate allocation.  If you're looking for general high-performance serialization, you probably want [mason](https://hackage.haskell.org/package/mason). But if you're dealing with data that is already "shaped" like binary data, e.g. using types defined in-[binrep](https://hackage.haskell.org/package/binrep), and you want the best-performance possible, read on...+[binrep][hackage-binrep], and you want the best performance possible, read on...  ## Why? Most binary serialization libraries tend towards a model where the serializer@@ -36,7 +37,14 @@ ## So... why? Well, bytezap will be slightly faster where it's applicable, and the implementation is extremely simple. It's a fun niche to fill, and it's-convenient for my [binrep](https://hackage.haskell.org/package/binrep) library.+convenient for my [binrep][hackage-binrep] library.++## Struct handling+We define even simpler parser & serializer types which can only handle "C+struct"-like types, where there is only one constructor and all fields have+known length at compile time. The way these work, GHC is pretty much guaranteed+to generate the fastest code possible. These are very experimental, but see+[binrep][hackage-binrep] for example usage.  ## Non-features ### Serialize to `ByteString` (pinned byte arrays) only
bytezap.cabal view
@@ -5,10 +5,10 @@ -- see: https://github.com/sol/hpack  name:           bytezap-version:        1.1.0+version:        1.3.0 synopsis:       Bytestring builder with zero intermediate allocation description:    Please see README.md.-category:       Data, Serialization+category:       Data, Serialization, Generics homepage:       https://github.com/raehik/bytezap#readme bug-reports:    https://github.com/raehik/bytezap/issues author:         Ben Orchard@@ -29,6 +29,10 @@ library   exposed-modules:       Bytezap+      Bytezap.Common.Generic+      Bytezap.Parser.Struct+      Bytezap.Parser.Struct.Generic+      Bytezap.Parser.Struct.TypeLits.Bytes       Bytezap.Poke       Bytezap.Poke.Derived       Bytezap.Poke.Derived.Endian@@ -36,7 +40,7 @@       Bytezap.Poke.KnownLen       Bytezap.Struct       Bytezap.Struct.Generic-      Bytezap.Struct.TypeLits+      Bytezap.Struct.TypeLits.Bytes       Bytezap.Write       Bytezap.Write.Derived       Bytezap.Write.Internal@@ -46,7 +50,6 @@       Raehik.Compat.Data.Word.ByteSwap       Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops       Raehik.Compat.GHC.Exts.GHC910UnalignedAddrPrimops-      Raehik.TypeLevelBytes       Util.TypeNats   other-modules:       Paths_bytezap@@ -69,6 +72,9 @@   build-depends:       base >=4.18.0.0 && <4.20     , bytestring >=0.11.5.3 && <0.13.0.0+    , defun-core ==0.1.*+    , generic-type-functions >=0.1.0 && <0.2     , primitive >=0.8.0.0 && <0.10.0.0     , text >=2.0.2 && <2.2+    , type-level-bytestrings >=0.1.0 && <0.2   default-language: GHC2021
+ src/Bytezap/Common/Generic.hs view
@@ -0,0 +1,16 @@+module Bytezap.Common.Generic where++import GHC.TypeNats+import DeFun.Core ( type (~>), type App )+import Generic.Type.Function.FoldMap ( type GTFoldMapC )++type PlusSym :: Natural ~> Natural ~> Natural+data PlusSym f+type instance App PlusSym f = PlusSym1 f++type PlusSym1 :: Natural -> Natural ~> Natural+data PlusSym1 l r+type instance App (PlusSym1 l) r = l + r++-- | Generic type 'foldMap' using the addition monoid.+type GTFoldMapCAddition f gf = GTFoldMapC PlusSym 0 f gf
+ src/Bytezap/Parser/Struct.hs view
@@ -0,0 +1,160 @@+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE BlockArguments #-}+-- {-# LANGUAGE DataKinds #-} -- needed for manual ZeroBitType def (unsure why)+-- {-# LANGUAGE FlexibleInstances #-}++{- | Struct parser.++We do still have to do failure checking, because unlike C we check some types+(e.g. bitfields). Hopefully inlining can remove those checks when unnecessary.+-}++module Bytezap.Parser.Struct where++import GHC.Exts+import GHC.ForeignPtr+import Data.Void ( Void )++import Data.Word ( Word8 )+import Data.ByteString.Internal qualified as B+import System.IO.Unsafe ( unsafePerformIO )++import Raehik.Compat.Data.Primitive.Types++type PureMode = Proxy# Void+type IOMode   = State# RealWorld+type STMode s = State# s++type ParserT# (st :: ZeroBitType) e a =+       ForeignPtrContents {- ^ pointer provenance -}+    -> Addr# {- ^ base address -}+    -> Int#  {- ^ cursor offset from base -}+    -> st    {- ^ state token -}+    -> Res# st e a++-- we take a 'ForeignPtrContents' because it lets us create bytestrings without+-- copying if we want. it's useful+newtype ParserT (st :: ZeroBitType) e a =+    ParserT { runParserT# :: ParserT# st e a }++instance Functor (ParserT st e) where+  fmap f (ParserT g) = ParserT \fpc base os st0 -> case g fpc base os st0 of+    OK# st1 a -> let !b = f a in OK# st1 b+    x         -> unsafeCoerce# x+  {-# inline fmap #-}++-- No Applicative due to no offset passing.++-- | The type of pure parsers.+type Parser     = ParserT PureMode++-- | The type of parsers which can embed `IO` actions.+type ParserIO   = ParserT IOMode++-- | The type of parsers which can embed `ST` actions.+type ParserST s = ParserT (STMode s)++-- | Primitive parser result wrapped with a state token.+--+-- You should rarely need to manipulate values of this type directly. Use the+-- provided bidirectional pattern synonyms 'OK#', 'Fail#' and 'Err#'.+type Res# (st :: ZeroBitType) e a =+  (# st, ResI# e a #)++-- | Primitive parser result.+type ResI# e a =+  (#+    (# a #)+  | (# #)+  | (# e #)+  #)++-- | 'Res#' constructor for a successful parse.+--   Contains the return value and a state token.+pattern OK# :: (st :: ZeroBitType) -> a -> Res# st e a+pattern OK# st a = (# st, (# (# a #) | | #) #)++-- | 'Res#' constructor for recoverable failure.+--   Contains only a state token.+pattern Fail# :: (st :: ZeroBitType) -> Res# st e a+pattern Fail# st = (# st, (# | (# #) | #) #)++-- | 'Res#' constructor for errors which are by default non-recoverable.+--    Contains the error, plus a state token.+pattern Err# :: (st :: ZeroBitType) -> e -> Res# st e a+pattern Err# st e = (# st, (# | | (# e #) #) #)+{-# complete OK#, Fail#, Err# #-}++-- | caller must guarantee that buffer is long enough for parser!!+unsafeRunParserBs :: forall a e. B.ByteString -> Parser e a -> Result e a+unsafeRunParserBs (B.BS fptr _) = unsafeRunParserFPtr fptr++-- | caller must guarantee that buffer is long enough for parser!!+unsafeRunParserPtr :: forall a e. Ptr Word8 -> Parser e a -> Result e a+unsafeRunParserPtr (Ptr base#) = unsafeRunParser' base# FinalPtr++-- | caller must guarantee that buffer is long enough for parser!!+unsafeRunParserFPtr :: forall a e. ForeignPtr Word8 -> Parser e a -> Result e a+unsafeRunParserFPtr fptr p =+    unsafePerformIO $ B.unsafeWithForeignPtr fptr $ \ptr ->+        pure $ unsafeRunParserPtr ptr p++-- | caller must guarantee that buffer is long enough for parser!!+unsafeRunParser'+    :: forall a e. Addr# -> ForeignPtrContents -> Parser e a -> Result e a+unsafeRunParser' base# fpc (ParserT p) =+    case p fpc base# 0# proxy# of+      OK#   _st1 a -> OK a+      Fail# _st1   -> Fail+      Err#  _st1 e -> Err e++-- | Higher-level boxed data type for parsing results.+data Result e a =+    OK a    -- ^ Contains return value.+  | Fail    -- ^ Recoverable-by-default failure.+  | Err !e  -- ^ Unrecoverable-by-default error.+  deriving Show++-- | can't provide via 'pure' as no 'Applicative'+constParse :: a -> ParserT st e a+constParse a = ParserT \_fpc _base _os st -> OK# st a++sequenceParsers+    :: Int -> (a -> b -> c)+    -> ParserT st e a -> ParserT st e b -> ParserT st e c+sequenceParsers (I# len#) f (ParserT pa) (ParserT pb) =+    ParserT \fpc base os# st0 ->+        case pa fpc base os# st0 of+          Fail# st1 ->  Fail# st1+          Err# st1 e -> Err# st1 e+          OK# st1 a ->+            case pb fpc base (os# +# len#) st1 of+              Fail# st2 ->  Fail# st2+              Err# st2 e -> Err# st2 e+              OK# st2 b -> OK# st2 (f a b)++-- TODO using indexWord8OffAddrAs to permit pure mode. flatparse does this (at+-- least for integers). guess it's OK?+prim :: forall a st e. Prim' a => ParserT st e a+prim = ParserT \_fpc base os st ->+    case indexWord8OffAddrAs# base os of a -> OK# st a++-- | parse literal+lit :: Eq a => a -> ParserT st e a -> ParserT st e ()+lit al (ParserT p) = ParserT \fpc base os st0 ->+    case p fpc base os st0 of+      Fail# st1    -> Fail# st1+      Err#  st1 e  -> Err#  st1 e+      OK#   st1 ar -> if al == ar then OK# st1 () else Fail# st1++-- | parse literal (CPS)+withLit+    :: Eq a => Int# -> a -> ParserT st e a -> ParserT st e r -> ParserT st e r+withLit len# al (ParserT p) (ParserT pCont) = ParserT \fpc base os# st0 ->+    case p fpc base os# st0 of+      Fail# st1    -> Fail# st1+      Err#  st1 e  -> Err#  st1 e+      OK#   st1 ar ->+        if al == ar then pCont fpc base (os# +# len#) st1 else Fail# st1
+ src/Bytezap/Parser/Struct/Generic.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE UndecidableInstances #-} -- thanks to type manipulation++module Bytezap.Parser.Struct.Generic where++import Bytezap.Parser.Struct+import GHC.Generics+import GHC.Exts+import Data.Kind+import GHC.TypeNats+import Util.TypeNats ( natValInt )+import Bytezap.Common.Generic ( type GTFoldMapCAddition )+import DeFun.Core ( type (~>) )++class GParseBase tag where+    -- | The state token of the parser.+    type GParseBaseSt tag :: ZeroBitType+    type GParseBaseC tag a :: Constraint+    type GParseBaseE tag :: Type++    -- unlike the serializer we stay newtyped because we want our Functor+    gParseBase+        :: GParseBaseC tag a+        => ParserT (GParseBaseSt tag) (GParseBaseE tag) a++    -- | Defunctionalization symbol for a type family turning 'Type's into+    --   'Natural's. (Needed as we can't partially apply type families.)+    type GParseBaseLenTF tag :: Type ~> Natural++class GParse tag gf where+    gParse :: ParserT (GParseBaseSt tag) (GParseBaseE tag) (gf p)++instance GParse tag gf => GParse tag (D1 cd gf) where+    gParse = M1 <$> gParse @tag+instance GParse tag gf => GParse tag (C1 cc gf) where+    gParse = M1 <$> gParse @tag++instance+  ( GParse tag l+  , GParse tag r+  , GParseBase tag+  , lenL ~ GTFoldMapCAddition (GParseBaseLenTF tag) l+  , KnownNat lenL+  ) => GParse tag (l :*: r) where+    gParse = sequenceParsers len (:*:) (gParse @tag) (gParse @tag)+      where+        len = natValInt @lenL++instance (GParseBase tag, GParseBaseC tag a) => GParse tag (S1 c (Rec0 a)) where+    gParse = (M1 . K1) <$> gParseBase @tag++-- | Wow, look! Nothing!+instance GParse tag U1 where gParse = constParse U1
+ src/Bytezap/Parser/Struct/TypeLits/Bytes.hs view
@@ -0,0 +1,95 @@+{- | Efficient type-level bytestring parsing.++One may implement this using the type-level serializing, but mirroring it for+parsing does less work and allocation.+-}++{-# LANGUAGE AllowAmbiguousTypes, UndecidableInstances #-}++module Bytezap.Parser.Struct.TypeLits.Bytes where++import Data.Type.Byte+import Bytezap.Parser.Struct ( ParserT, prim, withLit, constParse )+import Numeric.Natural ( Natural )++class ParseReifyBytesW64 (ns :: [Natural]) where+    parseReifyBytesW64 :: ParserT st e ()++-- | Enough bytes to make a 'Word64'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ReifyW8 n3+  , ReifyW8 n4+  , ReifyW8 n5+  , ReifyW8 n6+  , ReifyW8 n7+  , ReifyW8 n8+  , ParseReifyBytesW64 ns+  ) => ParseReifyBytesW64 (n1 ': n2 ': n3 ': n4 ': n5 ': n6 ': n7 ': n8 ': ns) where+    {-# INLINE parseReifyBytesW64 #-}+    parseReifyBytesW64 = withLit 8# (reifyW64 @n1 @n2 @n3 @n4 @n5 @n6 @n7 @n8)+        prim (parseReifyBytesW64 @ns)++-- | Try to group 'Word32's next.+instance ParseReifyBytesW32 ns => ParseReifyBytesW64 ns where+    {-# INLINE parseReifyBytesW64 #-}+    parseReifyBytesW64 = parseReifyBytesW32 @ns++-- | Serialize a type-level bytestring, largest grouping 'Word32'.+class ParseReifyBytesW32 (ns :: [Natural]) where+    parseReifyBytesW32 :: ParserT st e ()++-- | Enough bytes to make a 'Word32'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ReifyW8 n3+  , ReifyW8 n4+  , ParseReifyBytesW32 ns+  ) => ParseReifyBytesW32 (n1 ': n2 ': n3 ': n4 ': ns) where+    {-# INLINE parseReifyBytesW32 #-}+    parseReifyBytesW32 = withLit 4# (reifyW32 @n1 @n2 @n3 @n4)+        prim (parseReifyBytesW32 @ns)++-- | Try to group 'Word16's next.+instance ParseReifyBytesW16 ns => ParseReifyBytesW32 ns where+    {-# INLINE parseReifyBytesW32 #-}+    parseReifyBytesW32 = parseReifyBytesW16 @ns++-- | Serialize a type-level bytestring, largest grouping 'Word16'.+class ParseReifyBytesW16 (ns :: [Natural]) where+    parseReifyBytesW16 :: ParserT st e ()++-- | Enough bytes to make a 'Word16'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ParseReifyBytesW16 ns+  ) => ParseReifyBytesW16 (n1 ': n2 ': ns) where+    {-# INLINE parseReifyBytesW16 #-}+    parseReifyBytesW16 = withLit 2# (reifyW16 @n1 @n2)+        prim (parseReifyBytesW16 @ns)++-- | Reify byte-by-byte next.+instance ParseReifyBytesW8 ns => ParseReifyBytesW16 ns where+    {-# INLINE parseReifyBytesW16 #-}+    parseReifyBytesW16 = parseReifyBytesW8 @ns++-- | Serialize a type-level bytestring, byte-by-byte.+class ParseReifyBytesW8 (ns :: [Natural]) where+    parseReifyBytesW8 :: ParserT st e ()++-- | Reify the next byte.+instance+  ( ReifyW8 n1+  , ParseReifyBytesW8 ns+  ) => ParseReifyBytesW8 (n1 ': ns) where+    {-# INLINE parseReifyBytesW8 #-}+    parseReifyBytesW8 = withLit 1# (reifyW8 @n1)+        prim (parseReifyBytesW8 @ns)++-- | End of the line.+instance ParseReifyBytesW8 '[] where+    {-# INLINE parseReifyBytesW8 #-}+    parseReifyBytesW8 = constParse ()
src/Bytezap/Poke.hs view
@@ -95,3 +95,8 @@ fromStructPoke :: Int -> Struct.Poke s -> Poke s fromStructPoke (I# len#) (Struct.Poke p) = Poke $ \base# os# s ->     (# p base# os# s, os# +# len# #)++-- | Use a struct poke as a regular poke by throwing away the return offset.+toStructPoke :: Poke s -> Struct.Poke s+toStructPoke (Poke p) = Struct.Poke $ \base# os0# s0 ->+    case p base# os0# s0 of (# s1, _os1# #) -> s1
src/Bytezap/Struct/Generic.hs view
@@ -26,10 +26,11 @@ import Bytezap.Struct import GHC.Generics import GHC.Exts---- TODO fill in kind of a (some generic thing)-type family UnwrapGenericS1 a where-    UnwrapGenericS1 (S1 c (Rec0 a)) = a+import Bytezap.Common.Generic ( type GTFoldMapCAddition )+import Data.Kind+import GHC.TypeNats+import Util.TypeNats ( natValInt )+import DeFun.Core ( type (~>) )  -- | Class for holding info on class to use for poking base cases. --@@ -39,42 +40,41 @@ -- -- We stay unboxed here because the internals are unboxed, just for convenience. -- Maybe this is bad, let me know.-class GPokeBase idx where+class GPokeBase tag where     -- | The state token of our poker.-    type GPokeBaseSt idx+    type GPokeBaseSt tag      -- | The type class that provides base case poking.     --     -- The type class should provide a function that looks like 'gPokeBase'.-    type GPokeBaseC idx a :: Constraint--    gPokeBase :: GPokeBaseC idx a => a -> Poke# (GPokeBaseSt idx)+    type GPokeBaseC tag a :: Constraint -    -- | The type class that provides poked length (known at compile time).-    type KnownSizeOf' idx a :: Constraint+    gPokeBase :: GPokeBaseC tag a => a -> Poke# (GPokeBaseSt tag) -    -- | Get the poked length of the given type. Unboxed because I felt like it.-    ---    -- I think we have to pass a proxy, because of forall limitations on-    -- instance signatures. This would be much better with explicit type-    -- variables (GHC 9.10 or 9.12).-    sizeOf' :: forall a. KnownSizeOf' idx a => Proxy# a -> Int#+    type GPokeBaseLenTF tag :: Type ~> Natural -class GPoke idx f where gPoke :: f p -> Poke# (GPokeBaseSt idx)+class GPoke tag f where gPoke :: f p -> Poke# (GPokeBaseSt tag) -instance GPoke idx f => GPoke idx (D1 c f) where gPoke = gPoke @idx . unM1-instance GPoke idx f => GPoke idx (C1 c f) where gPoke = gPoke @idx . unM1+instance GPoke tag f => GPoke tag (D1 c f) where gPoke = gPoke @tag . unM1+instance GPoke tag f => GPoke tag (C1 c f) where gPoke = gPoke @tag . unM1 -instance (GPoke idx l, GPoke idx r, GPokeBase idx, KnownSizeOf' idx (UnwrapGenericS1 l))-  => GPoke idx (l :*: r) where+instance+  ( GPoke tag l+  , GPoke tag r+  , GPokeBase tag+  , lenL ~ GTFoldMapCAddition (GPokeBaseLenTF tag) l+  , KnownNat lenL+  ) => GPoke tag (l :*: r) where     -- TODO moved os and s0 to RHS because base is const and those aren't?     -- will this change anything?? idk!!!!     gPoke (l :*: r) base# = \os# s0 ->-        case gPoke @idx l base# os# s0 of-          s1 -> gPoke @idx r base# (os# +# sizeOf' @idx @(UnwrapGenericS1 l) proxy#) s1+        case gPoke @tag l base# os# s0 of+          s1 -> gPoke @tag r base# (os# +# lenL#) s1+      where+        !(I# lenL#) = natValInt @lenL -instance (GPokeBase idx, GPokeBaseC idx a) => GPoke idx (S1 c (Rec0 a)) where-    gPoke = gPokeBase @idx . unK1 . unM1+instance (GPokeBase tag, GPokeBaseC tag a) => GPoke tag (S1 c (Rec0 a)) where+    gPoke = gPokeBase @tag . unK1 . unM1  -- | Wow, look! Nothing!-instance GPoke idx U1 where gPoke U1 _base# = \_os# s0 -> s0+instance GPoke tag U1 where gPoke U1 _base# = \_os# s0 -> s0
− src/Bytezap/Struct/TypeLits.hs
@@ -1,102 +0,0 @@-{- | Efficient type-level bytestring serialization.--@['Natural']@s have a convenient syntax, and we can use them as a type-level-bytestring by asserting that each 'Natural' is <=255 when reifying. This module-provides type classes which give you a serializer for a given @['Natural']@.--We maximize efficiency by grouping bytes into machine words. We have to be-pretty verbose to achieve this. Each type class attempts to group bytes into its-machine word type, and if it can't (i.e. not enough bytes remain), it hands off-to the next type class which handles the next smaller machine word.--I did a quick Core check and found that GHC seems to successfully generate-minimal code for this e.g. for an 8-byte magic, GHC will do one-@writeWord64OffAddr#@ of a constant. Great!--}--{-# LANGUAGE AllowAmbiguousTypes, UndecidableInstances #-}--module Bytezap.Struct.TypeLits where--import Raehik.TypeLevelBytes-import Bytezap.Struct ( Poke, sequencePokes, emptyPoke, prim )-import Numeric.Natural ( Natural )---- | Serialize a type-level bytestring, largest grouping 'Word64'.-class ReifyBytesW64 (ns :: [Natural]) where reifyBytesW64 :: Poke n---- | Enough bytes to make a 'Word64'.-instance {-# OVERLAPPING #-}-  ( ReifyW8 n1-  , ReifyW8 n2-  , ReifyW8 n3-  , ReifyW8 n4-  , ReifyW8 n5-  , ReifyW8 n6-  , ReifyW8 n7-  , ReifyW8 n8-  , ReifyBytesW64 ns-  ) => ReifyBytesW64 (n1 ': n2 ': n3 ': n4 ': n5 ': n6 ': n7 ': n8 ': ns) where-    {-# INLINE reifyBytesW64 #-}-    reifyBytesW64 = sequencePokes-        (prim (reifyW64 @n1 @n2 @n3 @n4 @n5 @n6 @n7 @n8)) 8 (reifyBytesW64 @ns)---- | Try to group 'Word32's next.-instance ReifyBytesW32 ns => ReifyBytesW64 ns where-    {-# INLINE reifyBytesW64 #-}-    reifyBytesW64 = reifyBytesW32 @ns---- | Serialize a type-level bytestring, largest grouping 'Word32'.-class ReifyBytesW32 (ns :: [Natural]) where reifyBytesW32 :: Poke s---- | Enough bytes to make a 'Word32'.-instance {-# OVERLAPPING #-}-  ( ReifyW8 n1-  , ReifyW8 n2-  , ReifyW8 n3-  , ReifyW8 n4-  , ReifyBytesW32 ns-  ) => ReifyBytesW32 (n1 ': n2 ': n3 ': n4 ': ns) where-    {-# INLINE reifyBytesW32 #-}-    reifyBytesW32 = sequencePokes-        (prim (reifyW32 @n1 @n2 @n3 @n4)) 4 (reifyBytesW32 @ns)---- | Try to group 'Word16's next.-instance ReifyBytesW16 ns => ReifyBytesW32 ns where-    {-# INLINE reifyBytesW32 #-}-    reifyBytesW32 = reifyBytesW16 @ns---- | Serialize a type-level bytestring, largest grouping 'Word32'.-class ReifyBytesW16 (ns :: [Natural]) where reifyBytesW16 :: Poke s---- | Enough bytes to make a 'Word16'.-instance-  ( ReifyW8 n1-  , ReifyW8 n2-  , ReifyBytesW16 ns-  ) => ReifyBytesW16 (n1 ': n2 ': ns) where-    {-# INLINE reifyBytesW16 #-}-    reifyBytesW16 = sequencePokes-        (prim (reifyW16 @n1 @n2)) 2 (reifyBytesW16 @ns)---- | Reify byte-by-byte next.-instance ReifyBytesW8 ns => ReifyBytesW16 ns where-    {-# INLINE reifyBytesW16 #-}-    reifyBytesW16 = reifyBytesW8 @ns---- | Serialize a type-level bytestring, byte-by-byte.-class ReifyBytesW8 (ns :: [Natural]) where reifyBytesW8 :: Poke s---- | Reify the next byte.-instance-  ( ReifyW8 n1-  , ReifyBytesW8 ns-  ) => ReifyBytesW8 (n1 ': ns) where-    {-# INLINE reifyBytesW8 #-}-    reifyBytesW8 = sequencePokes-        (prim (reifyW8 @n1)) 1 (reifyBytesW8 @ns)---- | End of the line.-instance ReifyBytesW8 '[] where-    {-# INLINE reifyBytesW8 #-}-    reifyBytesW8 = emptyPoke
+ src/Bytezap/Struct/TypeLits/Bytes.hs view
@@ -0,0 +1,107 @@+{- | Efficient type-level bytestring serialization.++@['Natural']@s have a convenient syntax, and we can use them as a type-level+bytestring by asserting that each 'Natural' is <=255 when reifying. This module+provides type classes which give you a serializer for a given @['Natural']@.++We maximize efficiency by grouping bytes into machine words. We have to be+pretty verbose to achieve this. Each type class attempts to group bytes into its+machine word type, and if it can't (i.e. not enough bytes remain), it hands off+to the next type class which handles the next smaller machine word.++I did a quick Core check and found that GHC seems to successfully generate+minimal code for this e.g. for an 8-byte magic, GHC will do one+@writeWord64OffAddr#@ of a constant. Great!++The only way I can think of to make this faster is to somehow obtain an 'Addr#'+with a known length. With that, we could @memcpy@. But that would be slower for+small magics, and maybe others. And I doubt we can conjure up an 'Addr#' at+compile time. So I'm fairly confident that this is the best you're gonna get.+-}++{-# LANGUAGE AllowAmbiguousTypes, UndecidableInstances #-}++module Bytezap.Struct.TypeLits.Bytes where++import Data.Type.Byte+import Bytezap.Struct ( Poke, sequencePokes, emptyPoke, prim )+import Numeric.Natural ( Natural )++-- | Serialize a type-level bytestring, largest grouping 'Word64'.+class ReifyBytesW64 (ns :: [Natural]) where reifyBytesW64 :: Poke s++-- | Enough bytes to make a 'Word64'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ReifyW8 n3+  , ReifyW8 n4+  , ReifyW8 n5+  , ReifyW8 n6+  , ReifyW8 n7+  , ReifyW8 n8+  , ReifyBytesW64 ns+  ) => ReifyBytesW64 (n1 ': n2 ': n3 ': n4 ': n5 ': n6 ': n7 ': n8 ': ns) where+    {-# INLINE reifyBytesW64 #-}+    reifyBytesW64 = sequencePokes+        (prim (reifyW64 @n1 @n2 @n3 @n4 @n5 @n6 @n7 @n8)) 8 (reifyBytesW64 @ns)++-- | Try to group 'Word32's next.+instance ReifyBytesW32 ns => ReifyBytesW64 ns where+    {-# INLINE reifyBytesW64 #-}+    reifyBytesW64 = reifyBytesW32 @ns++-- | Serialize a type-level bytestring, largest grouping 'Word32'.+class ReifyBytesW32 (ns :: [Natural]) where reifyBytesW32 :: Poke s++-- | Enough bytes to make a 'Word32'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ReifyW8 n3+  , ReifyW8 n4+  , ReifyBytesW32 ns+  ) => ReifyBytesW32 (n1 ': n2 ': n3 ': n4 ': ns) where+    {-# INLINE reifyBytesW32 #-}+    reifyBytesW32 = sequencePokes+        (prim (reifyW32 @n1 @n2 @n3 @n4)) 4 (reifyBytesW32 @ns)++-- | Try to group 'Word16's next.+instance ReifyBytesW16 ns => ReifyBytesW32 ns where+    {-# INLINE reifyBytesW32 #-}+    reifyBytesW32 = reifyBytesW16 @ns++-- | Serialize a type-level bytestring, largest grouping 'Word16'.+class ReifyBytesW16 (ns :: [Natural]) where reifyBytesW16 :: Poke s++-- | Enough bytes to make a 'Word16'.+instance {-# OVERLAPPING #-}+  ( ReifyW8 n1+  , ReifyW8 n2+  , ReifyBytesW16 ns+  ) => ReifyBytesW16 (n1 ': n2 ': ns) where+    {-# INLINE reifyBytesW16 #-}+    reifyBytesW16 = sequencePokes+        (prim (reifyW16 @n1 @n2)) 2 (reifyBytesW16 @ns)++-- | Reify byte-by-byte next.+instance ReifyBytesW8 ns => ReifyBytesW16 ns where+    {-# INLINE reifyBytesW16 #-}+    reifyBytesW16 = reifyBytesW8 @ns++-- | Serialize a type-level bytestring, byte-by-byte.+class ReifyBytesW8 (ns :: [Natural]) where reifyBytesW8 :: Poke s++-- | Reify the next byte.+instance+  ( ReifyW8 n1+  , ReifyBytesW8 ns+  ) => ReifyBytesW8 (n1 ': ns) where+    {-# INLINE reifyBytesW8 #-}+    reifyBytesW8 = sequencePokes+        (prim (reifyW8 @n1)) 1 (reifyBytesW8 @ns)++-- | End of the line.+instance ReifyBytesW8 '[] where+    {-# INLINE reifyBytesW8 #-}+    reifyBytesW8 = emptyPoke
src/Raehik/Compat/Data/Primitive/Types/Endian.hs view
@@ -32,8 +32,8 @@     byteSwap = castWord64ToDouble . byteSwap . castDoubleToWord64  newtype ByteOrdered (end :: ByteOrder) a = ByteOrdered-  { unByteOrdered :: a }-    deriving (Ord, Eq, Show, Num) via a+  { unByteOrdered :: a+  } deriving (Ord, Eq, Show, Num, Real, Enum, Integral) via a  -- | Newtype for easier instance derivation. newtype PrimByteSwapped a = PrimByteSwapped { unPrimByteSwapped :: a }
− src/Raehik/TypeLevelBytes.hs
@@ -1,319 +0,0 @@--- | Utilities for using @Natural@s as type-level bytes.--{-# LANGUAGE AllowAmbiguousTypes #-}--module Raehik.TypeLevelBytes where--import Numeric.Natural ( Natural )-import Data.Word ( Word8, Word16, Word32, Word64 )-import Data.Bits ( unsafeShiftL, (.|.) )--{-# INLINE reifyW64 #-}--- | Reify 8 type-level bytes to a 'Word64'.-reifyW64-    :: forall n1 n2 n3 n4 n5 n6 n7 n8-    .  ( ReifyW8 n1-       , ReifyW8 n2-       , ReifyW8 n3-       , ReifyW8 n4-       , ReifyW8 n5-       , ReifyW8 n6-       , ReifyW8 n7-       , ReifyW8 n8-    ) => Word64-reifyW64 =            fI (reifyW8 @n1)-    .|. unsafeShiftL (fI (reifyW8 @n2))  8-    .|. unsafeShiftL (fI (reifyW8 @n3)) 16-    .|. unsafeShiftL (fI (reifyW8 @n4)) 24-    .|. unsafeShiftL (fI (reifyW8 @n5)) 32-    .|. unsafeShiftL (fI (reifyW8 @n6)) 40-    .|. unsafeShiftL (fI (reifyW8 @n7)) 48-    .|. unsafeShiftL (fI (reifyW8 @n8)) 56-  where fI = fromIntegral--{-# INLINE reifyW32 #-}--- | Reify 4 type-level bytes to a 'Word32'.-reifyW32-    :: forall n1 n2 n3 n4-    .  ( ReifyW8 n1-       , ReifyW8 n2-       , ReifyW8 n3-       , ReifyW8 n4-    ) => Word32-reifyW32 =            fI (reifyW8 @n1)-    .|. unsafeShiftL (fI (reifyW8 @n2))  8-    .|. unsafeShiftL (fI (reifyW8 @n3)) 16-    .|. unsafeShiftL (fI (reifyW8 @n4)) 24-  where fI = fromIntegral--{-# INLINE reifyW16 #-}--- | Reify 2 type-level bytes to a 'Word16'.-reifyW16-    :: forall n1 n2-    .  ( ReifyW8 n1-       , ReifyW8 n2-    ) => Word16-reifyW16 =            fI (reifyW8 @n1)-    .|. unsafeShiftL (fI (reifyW8 @n2))  8-  where fI = fromIntegral---- | Reify a type-level byte (stored in a type-level 'Natural') to its 'Word8'.------ Attempting to reify a 'Natural' larger than 255 results in a type error.-class ReifyW8 (n :: Natural) where reifyW8 :: Word8-instance ReifyW8 0x00 where reifyW8 = 0x00-instance ReifyW8 0x01 where reifyW8 = 0x01-instance ReifyW8 0x02 where reifyW8 = 0x02-instance ReifyW8 0x03 where reifyW8 = 0x03-instance ReifyW8 0x04 where reifyW8 = 0x04-instance ReifyW8 0x05 where reifyW8 = 0x05-instance ReifyW8 0x06 where reifyW8 = 0x06-instance ReifyW8 0x07 where reifyW8 = 0x07-instance ReifyW8 0x08 where reifyW8 = 0x08-instance ReifyW8 0x09 where reifyW8 = 0x09-instance ReifyW8 0x0a where reifyW8 = 0x0a-instance ReifyW8 0x0b where reifyW8 = 0x0b-instance ReifyW8 0x0c where reifyW8 = 0x0c-instance ReifyW8 0x0d where reifyW8 = 0x0d-instance ReifyW8 0x0e where reifyW8 = 0x0e-instance ReifyW8 0x0f where reifyW8 = 0x0f-instance ReifyW8 0x10 where reifyW8 = 0x10-instance ReifyW8 0x11 where reifyW8 = 0x11-instance ReifyW8 0x12 where reifyW8 = 0x12-instance ReifyW8 0x13 where reifyW8 = 0x13-instance ReifyW8 0x14 where reifyW8 = 0x14-instance ReifyW8 0x15 where reifyW8 = 0x15-instance ReifyW8 0x16 where reifyW8 = 0x16-instance ReifyW8 0x17 where reifyW8 = 0x17-instance ReifyW8 0x18 where reifyW8 = 0x18-instance ReifyW8 0x19 where reifyW8 = 0x19-instance ReifyW8 0x1a where reifyW8 = 0x1a-instance ReifyW8 0x1b where reifyW8 = 0x1b-instance ReifyW8 0x1c where reifyW8 = 0x1c-instance ReifyW8 0x1d where reifyW8 = 0x1d-instance ReifyW8 0x1e where reifyW8 = 0x1e-instance ReifyW8 0x1f where reifyW8 = 0x1f-instance ReifyW8 0x20 where reifyW8 = 0x20-instance ReifyW8 0x21 where reifyW8 = 0x21-instance ReifyW8 0x22 where reifyW8 = 0x22-instance ReifyW8 0x23 where reifyW8 = 0x23-instance ReifyW8 0x24 where reifyW8 = 0x24-instance ReifyW8 0x25 where reifyW8 = 0x25-instance ReifyW8 0x26 where reifyW8 = 0x26-instance ReifyW8 0x27 where reifyW8 = 0x27-instance ReifyW8 0x28 where reifyW8 = 0x28-instance ReifyW8 0x29 where reifyW8 = 0x29-instance ReifyW8 0x2a where reifyW8 = 0x2a-instance ReifyW8 0x2b where reifyW8 = 0x2b-instance ReifyW8 0x2c where reifyW8 = 0x2c-instance ReifyW8 0x2d where reifyW8 = 0x2d-instance ReifyW8 0x2e where reifyW8 = 0x2e-instance ReifyW8 0x2f where reifyW8 = 0x2f-instance ReifyW8 0x30 where reifyW8 = 0x30-instance ReifyW8 0x31 where reifyW8 = 0x31-instance ReifyW8 0x32 where reifyW8 = 0x32-instance ReifyW8 0x33 where reifyW8 = 0x33-instance ReifyW8 0x34 where reifyW8 = 0x34-instance ReifyW8 0x35 where reifyW8 = 0x35-instance ReifyW8 0x36 where reifyW8 = 0x36-instance ReifyW8 0x37 where reifyW8 = 0x37-instance ReifyW8 0x38 where reifyW8 = 0x38-instance ReifyW8 0x39 where reifyW8 = 0x39-instance ReifyW8 0x3a where reifyW8 = 0x3a-instance ReifyW8 0x3b where reifyW8 = 0x3b-instance ReifyW8 0x3c where reifyW8 = 0x3c-instance ReifyW8 0x3d where reifyW8 = 0x3d-instance ReifyW8 0x3e where reifyW8 = 0x3e-instance ReifyW8 0x3f where reifyW8 = 0x3f-instance ReifyW8 0x40 where reifyW8 = 0x40-instance ReifyW8 0x41 where reifyW8 = 0x41-instance ReifyW8 0x42 where reifyW8 = 0x42-instance ReifyW8 0x43 where reifyW8 = 0x43-instance ReifyW8 0x44 where reifyW8 = 0x44-instance ReifyW8 0x45 where reifyW8 = 0x45-instance ReifyW8 0x46 where reifyW8 = 0x46-instance ReifyW8 0x47 where reifyW8 = 0x47-instance ReifyW8 0x48 where reifyW8 = 0x48-instance ReifyW8 0x49 where reifyW8 = 0x49-instance ReifyW8 0x4a where reifyW8 = 0x4a-instance ReifyW8 0x4b where reifyW8 = 0x4b-instance ReifyW8 0x4c where reifyW8 = 0x4c-instance ReifyW8 0x4d where reifyW8 = 0x4d-instance ReifyW8 0x4e where reifyW8 = 0x4e-instance ReifyW8 0x4f where reifyW8 = 0x4f-instance ReifyW8 0x50 where reifyW8 = 0x50-instance ReifyW8 0x51 where reifyW8 = 0x51-instance ReifyW8 0x52 where reifyW8 = 0x52-instance ReifyW8 0x53 where reifyW8 = 0x53-instance ReifyW8 0x54 where reifyW8 = 0x54-instance ReifyW8 0x55 where reifyW8 = 0x55-instance ReifyW8 0x56 where reifyW8 = 0x56-instance ReifyW8 0x57 where reifyW8 = 0x57-instance ReifyW8 0x58 where reifyW8 = 0x58-instance ReifyW8 0x59 where reifyW8 = 0x59-instance ReifyW8 0x5a where reifyW8 = 0x5a-instance ReifyW8 0x5b where reifyW8 = 0x5b-instance ReifyW8 0x5c where reifyW8 = 0x5c-instance ReifyW8 0x5d where reifyW8 = 0x5d-instance ReifyW8 0x5e where reifyW8 = 0x5e-instance ReifyW8 0x5f where reifyW8 = 0x5f-instance ReifyW8 0x60 where reifyW8 = 0x60-instance ReifyW8 0x61 where reifyW8 = 0x61-instance ReifyW8 0x62 where reifyW8 = 0x62-instance ReifyW8 0x63 where reifyW8 = 0x63-instance ReifyW8 0x64 where reifyW8 = 0x64-instance ReifyW8 0x65 where reifyW8 = 0x65-instance ReifyW8 0x66 where reifyW8 = 0x66-instance ReifyW8 0x67 where reifyW8 = 0x67-instance ReifyW8 0x68 where reifyW8 = 0x68-instance ReifyW8 0x69 where reifyW8 = 0x69-instance ReifyW8 0x6a where reifyW8 = 0x6a-instance ReifyW8 0x6b where reifyW8 = 0x6b-instance ReifyW8 0x6c where reifyW8 = 0x6c-instance ReifyW8 0x6d where reifyW8 = 0x6d-instance ReifyW8 0x6e where reifyW8 = 0x6e-instance ReifyW8 0x6f where reifyW8 = 0x6f-instance ReifyW8 0x70 where reifyW8 = 0x70-instance ReifyW8 0x71 where reifyW8 = 0x71-instance ReifyW8 0x72 where reifyW8 = 0x72-instance ReifyW8 0x73 where reifyW8 = 0x73-instance ReifyW8 0x74 where reifyW8 = 0x74-instance ReifyW8 0x75 where reifyW8 = 0x75-instance ReifyW8 0x76 where reifyW8 = 0x76-instance ReifyW8 0x77 where reifyW8 = 0x77-instance ReifyW8 0x78 where reifyW8 = 0x78-instance ReifyW8 0x79 where reifyW8 = 0x79-instance ReifyW8 0x7a where reifyW8 = 0x7a-instance ReifyW8 0x7b where reifyW8 = 0x7b-instance ReifyW8 0x7c where reifyW8 = 0x7c-instance ReifyW8 0x7d where reifyW8 = 0x7d-instance ReifyW8 0x7e where reifyW8 = 0x7e-instance ReifyW8 0x7f where reifyW8 = 0x7f-instance ReifyW8 0x80 where reifyW8 = 0x80-instance ReifyW8 0x81 where reifyW8 = 0x81-instance ReifyW8 0x82 where reifyW8 = 0x82-instance ReifyW8 0x83 where reifyW8 = 0x83-instance ReifyW8 0x84 where reifyW8 = 0x84-instance ReifyW8 0x85 where reifyW8 = 0x85-instance ReifyW8 0x86 where reifyW8 = 0x86-instance ReifyW8 0x87 where reifyW8 = 0x87-instance ReifyW8 0x88 where reifyW8 = 0x88-instance ReifyW8 0x89 where reifyW8 = 0x89-instance ReifyW8 0x8a where reifyW8 = 0x8a-instance ReifyW8 0x8b where reifyW8 = 0x8b-instance ReifyW8 0x8c where reifyW8 = 0x8c-instance ReifyW8 0x8d where reifyW8 = 0x8d-instance ReifyW8 0x8e where reifyW8 = 0x8e-instance ReifyW8 0x8f where reifyW8 = 0x8f-instance ReifyW8 0x90 where reifyW8 = 0x90-instance ReifyW8 0x91 where reifyW8 = 0x91-instance ReifyW8 0x92 where reifyW8 = 0x92-instance ReifyW8 0x93 where reifyW8 = 0x93-instance ReifyW8 0x94 where reifyW8 = 0x94-instance ReifyW8 0x95 where reifyW8 = 0x95-instance ReifyW8 0x96 where reifyW8 = 0x96-instance ReifyW8 0x97 where reifyW8 = 0x97-instance ReifyW8 0x98 where reifyW8 = 0x98-instance ReifyW8 0x99 where reifyW8 = 0x99-instance ReifyW8 0x9a where reifyW8 = 0x9a-instance ReifyW8 0x9b where reifyW8 = 0x9b-instance ReifyW8 0x9c where reifyW8 = 0x9c-instance ReifyW8 0x9d where reifyW8 = 0x9d-instance ReifyW8 0x9e where reifyW8 = 0x9e-instance ReifyW8 0x9f where reifyW8 = 0x9f-instance ReifyW8 0xa0 where reifyW8 = 0xa0-instance ReifyW8 0xa1 where reifyW8 = 0xa1-instance ReifyW8 0xa2 where reifyW8 = 0xa2-instance ReifyW8 0xa3 where reifyW8 = 0xa3-instance ReifyW8 0xa4 where reifyW8 = 0xa4-instance ReifyW8 0xa5 where reifyW8 = 0xa5-instance ReifyW8 0xa6 where reifyW8 = 0xa6-instance ReifyW8 0xa7 where reifyW8 = 0xa7-instance ReifyW8 0xa8 where reifyW8 = 0xa8-instance ReifyW8 0xa9 where reifyW8 = 0xa9-instance ReifyW8 0xaa where reifyW8 = 0xaa-instance ReifyW8 0xab where reifyW8 = 0xab-instance ReifyW8 0xac where reifyW8 = 0xac-instance ReifyW8 0xad where reifyW8 = 0xad-instance ReifyW8 0xae where reifyW8 = 0xae-instance ReifyW8 0xaf where reifyW8 = 0xaf-instance ReifyW8 0xb0 where reifyW8 = 0xb0-instance ReifyW8 0xb1 where reifyW8 = 0xb1-instance ReifyW8 0xb2 where reifyW8 = 0xb2-instance ReifyW8 0xb3 where reifyW8 = 0xb3-instance ReifyW8 0xb4 where reifyW8 = 0xb4-instance ReifyW8 0xb5 where reifyW8 = 0xb5-instance ReifyW8 0xb6 where reifyW8 = 0xb6-instance ReifyW8 0xb7 where reifyW8 = 0xb7-instance ReifyW8 0xb8 where reifyW8 = 0xb8-instance ReifyW8 0xb9 where reifyW8 = 0xb9-instance ReifyW8 0xba where reifyW8 = 0xba-instance ReifyW8 0xbb where reifyW8 = 0xbb-instance ReifyW8 0xbc where reifyW8 = 0xbc-instance ReifyW8 0xbd where reifyW8 = 0xbd-instance ReifyW8 0xbe where reifyW8 = 0xbe-instance ReifyW8 0xbf where reifyW8 = 0xbf-instance ReifyW8 0xc0 where reifyW8 = 0xc0-instance ReifyW8 0xc1 where reifyW8 = 0xc1-instance ReifyW8 0xc2 where reifyW8 = 0xc2-instance ReifyW8 0xc3 where reifyW8 = 0xc3-instance ReifyW8 0xc4 where reifyW8 = 0xc4-instance ReifyW8 0xc5 where reifyW8 = 0xc5-instance ReifyW8 0xc6 where reifyW8 = 0xc6-instance ReifyW8 0xc7 where reifyW8 = 0xc7-instance ReifyW8 0xc8 where reifyW8 = 0xc8-instance ReifyW8 0xc9 where reifyW8 = 0xc9-instance ReifyW8 0xca where reifyW8 = 0xca-instance ReifyW8 0xcb where reifyW8 = 0xcb-instance ReifyW8 0xcc where reifyW8 = 0xcc-instance ReifyW8 0xcd where reifyW8 = 0xcd-instance ReifyW8 0xce where reifyW8 = 0xce-instance ReifyW8 0xcf where reifyW8 = 0xcf-instance ReifyW8 0xd0 where reifyW8 = 0xd0-instance ReifyW8 0xd1 where reifyW8 = 0xd1-instance ReifyW8 0xd2 where reifyW8 = 0xd2-instance ReifyW8 0xd3 where reifyW8 = 0xd3-instance ReifyW8 0xd4 where reifyW8 = 0xd4-instance ReifyW8 0xd5 where reifyW8 = 0xd5-instance ReifyW8 0xd6 where reifyW8 = 0xd6-instance ReifyW8 0xd7 where reifyW8 = 0xd7-instance ReifyW8 0xd8 where reifyW8 = 0xd8-instance ReifyW8 0xd9 where reifyW8 = 0xd9-instance ReifyW8 0xda where reifyW8 = 0xda-instance ReifyW8 0xdb where reifyW8 = 0xdb-instance ReifyW8 0xdc where reifyW8 = 0xdc-instance ReifyW8 0xdd where reifyW8 = 0xdd-instance ReifyW8 0xde where reifyW8 = 0xde-instance ReifyW8 0xdf where reifyW8 = 0xdf-instance ReifyW8 0xe0 where reifyW8 = 0xe0-instance ReifyW8 0xe1 where reifyW8 = 0xe1-instance ReifyW8 0xe2 where reifyW8 = 0xe2-instance ReifyW8 0xe3 where reifyW8 = 0xe3-instance ReifyW8 0xe4 where reifyW8 = 0xe4-instance ReifyW8 0xe5 where reifyW8 = 0xe5-instance ReifyW8 0xe6 where reifyW8 = 0xe6-instance ReifyW8 0xe7 where reifyW8 = 0xe7-instance ReifyW8 0xe8 where reifyW8 = 0xe8-instance ReifyW8 0xe9 where reifyW8 = 0xe9-instance ReifyW8 0xea where reifyW8 = 0xea-instance ReifyW8 0xeb where reifyW8 = 0xeb-instance ReifyW8 0xec where reifyW8 = 0xec-instance ReifyW8 0xed where reifyW8 = 0xed-instance ReifyW8 0xee where reifyW8 = 0xee-instance ReifyW8 0xef where reifyW8 = 0xef-instance ReifyW8 0xf0 where reifyW8 = 0xf0-instance ReifyW8 0xf1 where reifyW8 = 0xf1-instance ReifyW8 0xf2 where reifyW8 = 0xf2-instance ReifyW8 0xf3 where reifyW8 = 0xf3-instance ReifyW8 0xf4 where reifyW8 = 0xf4-instance ReifyW8 0xf5 where reifyW8 = 0xf5-instance ReifyW8 0xf6 where reifyW8 = 0xf6-instance ReifyW8 0xf7 where reifyW8 = 0xf7-instance ReifyW8 0xf8 where reifyW8 = 0xf8-instance ReifyW8 0xf9 where reifyW8 = 0xf9-instance ReifyW8 0xfa where reifyW8 = 0xfa-instance ReifyW8 0xfb where reifyW8 = 0xfb-instance ReifyW8 0xfc where reifyW8 = 0xfc-instance ReifyW8 0xfd where reifyW8 = 0xfd-instance ReifyW8 0xfe where reifyW8 = 0xfe-instance ReifyW8 0xff where reifyW8 = 0xff