{- | Safe, if silly, byte representation for use at the type level.

'Word8' is a special type that GHC doesn't (and I think can't) promote to the
type level. We only have 'Natural's, which are unbounded. So we define a safe,
promotable representation, to allow us to prove well-sizedness at compile time.
Then we provide a bunch of type families and reifying typeclasses to enable
going between "similar" kinds ('Natural') and types ('Word8', 'B.ByteString')
respectively.

Type-level functionality is stored in 'Binrep.Type.Byte.TypeLevel' because the
definitions are even sillier than the ones here.

Do not use this on the term level. That would be _extremely_ silly.
-}

{-# LANGUAGE AllowAmbiguousTypes, UndecidableInstances #-}

module Binrep.Type.Byte where

import Bytezap qualified as BZ
import Bytezap.Poke.Int qualified as BZ
import GHC.TypeNats
import GHC.Word

-- | Efficiently reify a list of type-level 'Natural' bytes to to a bytestring
--   builder.
--
-- Attempting to reify a 'Natural' larger than 255 results in a type error.
--
-- This is about as far as one should go for pointless performance here, I
-- should think.
class ReifyBytes (ns :: [Natural]) where reifyBytes :: BZ.Poke
instance ReifyBytes '[] where
    {-# INLINE reifyBytes #-}
    reifyBytes :: Poke
reifyBytes = Poke
forall a. Monoid a => a
mempty
instance (ByteVal n, ReifyBytes ns) => ReifyBytes (n ': ns) where
    {-# INLINE reifyBytes #-}
    reifyBytes :: Poke
reifyBytes = Word8 -> Poke
BZ.w8 (forall (n :: Natural). ByteVal n => Word8
byteVal @n) Poke -> Poke -> Poke
forall a. Semigroup a => a -> a -> a
<> forall (ns :: [Natural]). ReifyBytes ns => Poke
reifyBytes @ns

class ByteVal (n :: Natural) where byteVal :: Word8

instance ByteVal 0x00 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x00
instance ByteVal 0x01 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x01
instance ByteVal 0x02 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x02
instance ByteVal 0x03 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x03
instance ByteVal 0x04 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x04
instance ByteVal 0x05 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x05
instance ByteVal 0x06 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x06
instance ByteVal 0x07 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x07
instance ByteVal 0x08 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x08
instance ByteVal 0x09 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x09
instance ByteVal 0x0a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0a
instance ByteVal 0x0b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0b
instance ByteVal 0x0c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0c
instance ByteVal 0x0d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0d
instance ByteVal 0x0e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0e
instance ByteVal 0x0f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x0f
instance ByteVal 0x10 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x10
instance ByteVal 0x11 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x11
instance ByteVal 0x12 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x12
instance ByteVal 0x13 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x13
instance ByteVal 0x14 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x14
instance ByteVal 0x15 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x15
instance ByteVal 0x16 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x16
instance ByteVal 0x17 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x17
instance ByteVal 0x18 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x18
instance ByteVal 0x19 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x19
instance ByteVal 0x1a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1a
instance ByteVal 0x1b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1b
instance ByteVal 0x1c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1c
instance ByteVal 0x1d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1d
instance ByteVal 0x1e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1e
instance ByteVal 0x1f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x1f
instance ByteVal 0x20 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x20
instance ByteVal 0x21 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x21
instance ByteVal 0x22 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x22
instance ByteVal 0x23 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x23
instance ByteVal 0x24 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x24
instance ByteVal 0x25 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x25
instance ByteVal 0x26 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x26
instance ByteVal 0x27 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x27
instance ByteVal 0x28 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x28
instance ByteVal 0x29 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x29
instance ByteVal 0x2a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2a
instance ByteVal 0x2b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2b
instance ByteVal 0x2c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2c
instance ByteVal 0x2d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2d
instance ByteVal 0x2e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2e
instance ByteVal 0x2f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x2f
instance ByteVal 0x30 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x30
instance ByteVal 0x31 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x31
instance ByteVal 0x32 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x32
instance ByteVal 0x33 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x33
instance ByteVal 0x34 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x34
instance ByteVal 0x35 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x35
instance ByteVal 0x36 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x36
instance ByteVal 0x37 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x37
instance ByteVal 0x38 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x38
instance ByteVal 0x39 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x39
instance ByteVal 0x3a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3a
instance ByteVal 0x3b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3b
instance ByteVal 0x3c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3c
instance ByteVal 0x3d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3d
instance ByteVal 0x3e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3e
instance ByteVal 0x3f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x3f
instance ByteVal 0x40 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x40
instance ByteVal 0x41 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x41
instance ByteVal 0x42 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x42
instance ByteVal 0x43 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x43
instance ByteVal 0x44 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x44
instance ByteVal 0x45 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x45
instance ByteVal 0x46 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x46
instance ByteVal 0x47 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x47
instance ByteVal 0x48 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x48
instance ByteVal 0x49 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x49
instance ByteVal 0x4a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4a
instance ByteVal 0x4b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4b
instance ByteVal 0x4c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4c
instance ByteVal 0x4d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4d
instance ByteVal 0x4e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4e
instance ByteVal 0x4f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x4f
instance ByteVal 0x50 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x50
instance ByteVal 0x51 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x51
instance ByteVal 0x52 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x52
instance ByteVal 0x53 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x53
instance ByteVal 0x54 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x54
instance ByteVal 0x55 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x55
instance ByteVal 0x56 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x56
instance ByteVal 0x57 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x57
instance ByteVal 0x58 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x58
instance ByteVal 0x59 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x59
instance ByteVal 0x5a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5a
instance ByteVal 0x5b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5b
instance ByteVal 0x5c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5c
instance ByteVal 0x5d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5d
instance ByteVal 0x5e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5e
instance ByteVal 0x5f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x5f
instance ByteVal 0x60 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x60
instance ByteVal 0x61 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x61
instance ByteVal 0x62 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x62
instance ByteVal 0x63 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x63
instance ByteVal 0x64 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x64
instance ByteVal 0x65 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x65
instance ByteVal 0x66 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x66
instance ByteVal 0x67 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x67
instance ByteVal 0x68 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x68
instance ByteVal 0x69 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x69
instance ByteVal 0x6a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6a
instance ByteVal 0x6b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6b
instance ByteVal 0x6c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6c
instance ByteVal 0x6d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6d
instance ByteVal 0x6e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6e
instance ByteVal 0x6f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x6f
instance ByteVal 0x70 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x70
instance ByteVal 0x71 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x71
instance ByteVal 0x72 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x72
instance ByteVal 0x73 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x73
instance ByteVal 0x74 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x74
instance ByteVal 0x75 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x75
instance ByteVal 0x76 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x76
instance ByteVal 0x77 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x77
instance ByteVal 0x78 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x78
instance ByteVal 0x79 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x79
instance ByteVal 0x7a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7a
instance ByteVal 0x7b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7b
instance ByteVal 0x7c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7c
instance ByteVal 0x7d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7d
instance ByteVal 0x7e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7e
instance ByteVal 0x7f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x7f
instance ByteVal 0x80 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x80
instance ByteVal 0x81 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x81
instance ByteVal 0x82 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x82
instance ByteVal 0x83 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x83
instance ByteVal 0x84 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x84
instance ByteVal 0x85 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x85
instance ByteVal 0x86 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x86
instance ByteVal 0x87 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x87
instance ByteVal 0x88 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x88
instance ByteVal 0x89 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x89
instance ByteVal 0x8a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8a
instance ByteVal 0x8b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8b
instance ByteVal 0x8c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8c
instance ByteVal 0x8d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8d
instance ByteVal 0x8e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8e
instance ByteVal 0x8f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x8f
instance ByteVal 0x90 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x90
instance ByteVal 0x91 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x91
instance ByteVal 0x92 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x92
instance ByteVal 0x93 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x93
instance ByteVal 0x94 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x94
instance ByteVal 0x95 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x95
instance ByteVal 0x96 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x96
instance ByteVal 0x97 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x97
instance ByteVal 0x98 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x98
instance ByteVal 0x99 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x99
instance ByteVal 0x9a where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9a
instance ByteVal 0x9b where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9b
instance ByteVal 0x9c where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9c
instance ByteVal 0x9d where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9d
instance ByteVal 0x9e where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9e
instance ByteVal 0x9f where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0x9f
instance ByteVal 0xa0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa0
instance ByteVal 0xa1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa1
instance ByteVal 0xa2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa2
instance ByteVal 0xa3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa3
instance ByteVal 0xa4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa4
instance ByteVal 0xa5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa5
instance ByteVal 0xa6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa6
instance ByteVal 0xa7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa7
instance ByteVal 0xa8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa8
instance ByteVal 0xa9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xa9
instance ByteVal 0xaa where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xaa
instance ByteVal 0xab where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xab
instance ByteVal 0xac where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xac
instance ByteVal 0xad where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xad
instance ByteVal 0xae where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xae
instance ByteVal 0xaf where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xaf
instance ByteVal 0xb0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb0
instance ByteVal 0xb1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb1
instance ByteVal 0xb2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb2
instance ByteVal 0xb3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb3
instance ByteVal 0xb4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb4
instance ByteVal 0xb5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb5
instance ByteVal 0xb6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb6
instance ByteVal 0xb7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb7
instance ByteVal 0xb8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb8
instance ByteVal 0xb9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xb9
instance ByteVal 0xba where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xba
instance ByteVal 0xbb where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xbb
instance ByteVal 0xbc where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xbc
instance ByteVal 0xbd where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xbd
instance ByteVal 0xbe where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xbe
instance ByteVal 0xbf where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xbf
instance ByteVal 0xc0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc0
instance ByteVal 0xc1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc1
instance ByteVal 0xc2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc2
instance ByteVal 0xc3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc3
instance ByteVal 0xc4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc4
instance ByteVal 0xc5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc5
instance ByteVal 0xc6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc6
instance ByteVal 0xc7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc7
instance ByteVal 0xc8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc8
instance ByteVal 0xc9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xc9
instance ByteVal 0xca where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xca
instance ByteVal 0xcb where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xcb
instance ByteVal 0xcc where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xcc
instance ByteVal 0xcd where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xcd
instance ByteVal 0xce where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xce
instance ByteVal 0xcf where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xcf
instance ByteVal 0xd0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd0
instance ByteVal 0xd1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd1
instance ByteVal 0xd2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd2
instance ByteVal 0xd3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd3
instance ByteVal 0xd4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd4
instance ByteVal 0xd5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd5
instance ByteVal 0xd6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd6
instance ByteVal 0xd7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd7
instance ByteVal 0xd8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd8
instance ByteVal 0xd9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xd9
instance ByteVal 0xda where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xda
instance ByteVal 0xdb where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xdb
instance ByteVal 0xdc where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xdc
instance ByteVal 0xdd where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xdd
instance ByteVal 0xde where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xde
instance ByteVal 0xdf where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xdf
instance ByteVal 0xe0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe0
instance ByteVal 0xe1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe1
instance ByteVal 0xe2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe2
instance ByteVal 0xe3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe3
instance ByteVal 0xe4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe4
instance ByteVal 0xe5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe5
instance ByteVal 0xe6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe6
instance ByteVal 0xe7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe7
instance ByteVal 0xe8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe8
instance ByteVal 0xe9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xe9
instance ByteVal 0xea where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xea
instance ByteVal 0xeb where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xeb
instance ByteVal 0xec where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xec
instance ByteVal 0xed where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xed
instance ByteVal 0xee where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xee
instance ByteVal 0xef where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xef
instance ByteVal 0xf0 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf0
instance ByteVal 0xf1 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf1
instance ByteVal 0xf2 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf2
instance ByteVal 0xf3 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf3
instance ByteVal 0xf4 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf4
instance ByteVal 0xf5 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf5
instance ByteVal 0xf6 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf6
instance ByteVal 0xf7 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf7
instance ByteVal 0xf8 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf8
instance ByteVal 0xf9 where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xf9
instance ByteVal 0xfa where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xfa
instance ByteVal 0xfb where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xfb
instance ByteVal 0xfc where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xfc
instance ByteVal 0xfd where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xfd
instance ByteVal 0xfe where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xfe
instance ByteVal 0xff where
    {-# INLINE byteVal #-}
    byteVal :: Word8
byteVal = Word8
0xff