{-# LANGUAGE CPP #-}
{-# LANGUAGE UnboxedTuples #-}

#include "MachDeps.h"

module Raehik.Compat.Data.Primitive.Types
  ( Prim'(..)
  , P.Prim(..)
  , P.sizeOf
  ) where

import Data.Primitive.Types qualified as P
import Raehik.Compat.GHC.Exts.GHC910UnalignedAddrPrimops
import GHC.Exts
import GHC.Word
import GHC.Int
import Numeric.Natural

-- | 'P.Prim' extension class providing unaligned accesses
--
-- hoping to get this merged in https://github.com/haskell/primitive/issues/409
--
-- (also includes Addr# primops which that issue/PR may not)
--
-- Also includes an associated type for size in bytes. Another thing that maybe
-- primitive could provide. (Wouldn't be hard!)
class P.Prim a => Prim' a where
    type SizeOf a :: Natural
    -- | Read a value from the array. The offset is in bytes.
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> a

    readWord8ByteArrayAs#  :: MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
    writeWord8ByteArrayAs# :: MutableByteArray# s -> Int# -> a -> State# s -> State# s

    indexWord8OffAddrAs# :: Addr# -> Int# -> a

    readWord8OffAddrAs#  :: Addr# -> Int# -> State# s -> (# State# s, a #)
    writeWord8OffAddrAs# :: Addr# -> Int# -> a -> State# s -> State# s

instance Prim' Word8 where
    type SizeOf Word8 = SIZEOF_WORD8
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Word8
indexWord8ByteArrayAs# = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
P.indexByteArray#
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
readWord8ByteArrayAs#  = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
P.readByteArray#
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
writeWord8ByteArrayAs# = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
P.writeByteArray#
    indexWord8OffAddrAs# :: Addr# -> Int# -> Word8
indexWord8OffAddrAs#   = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
P.indexOffAddr#
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
readWord8OffAddrAs#    = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
P.readOffAddr#
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
writeWord8OffAddrAs#   = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
P.writeOffAddr#

instance Prim' Word16 where
    type SizeOf Word16 = SIZEOF_WORD16
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Word16
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Word16# -> Word16
W16# (ByteArray# -> Int# -> Word16#
indexWord8ArrayAsWord16# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word16 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Word16# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word16# #)
readWord8ArrayAsWord16# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Word16#
w# #) -> (# State# s
s1, Word16# -> Word16
W16# Word16#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word16 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (W16# Word16#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Word16# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Word16# -> State# d -> State# d
writeWord8ArrayAsWord16# MutableByteArray# s
arr# Int#
os# Word16#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Word16
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Word16# -> Word16
W16# (Addr# -> Int# -> Word16#
indexWord8OffAddrAsWord16# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word16 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Word16# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Word16# #)
readWord8OffAddrAsWord16# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Word16#
w# #) -> (# State# s
s1, Word16# -> Word16
W16# Word16#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Word16 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (W16# Word16#
w#) State# s
s# =
        Addr# -> Int# -> Word16# -> State# s -> State# s
forall d. Addr# -> Int# -> Word16# -> State# d -> State# d
writeWord8OffAddrAsWord16# Addr#
addr# Int#
os# Word16#
w# State# s
s#

instance Prim' Word32 where
    type SizeOf Word32 = SIZEOF_WORD32
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Word32
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Word32# -> Word32
W32# (ByteArray# -> Int# -> Word32#
indexWord8ArrayAsWord32# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word32 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Word32# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word32# #)
readWord8ArrayAsWord32# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Word32#
w# #) -> (# State# s
s1, Word32# -> Word32
W32# Word32#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word32 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (W32# Word32#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Word32# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Word32# -> State# d -> State# d
writeWord8ArrayAsWord32# MutableByteArray# s
arr# Int#
os# Word32#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Word32
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Word32# -> Word32
W32# (Addr# -> Int# -> Word32#
indexWord8OffAddrAsWord32# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word32 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Word32# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Word32# #)
readWord8OffAddrAsWord32# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Word32#
w# #) -> (# State# s
s1, Word32# -> Word32
W32# Word32#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Word32 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (W32# Word32#
w#) State# s
s# =
        Addr# -> Int# -> Word32# -> State# s -> State# s
forall d. Addr# -> Int# -> Word32# -> State# d -> State# d
writeWord8OffAddrAsWord32# Addr#
addr# Int#
os# Word32#
w# State# s
s#

instance Prim' Word64 where
    type SizeOf Word64 = SIZEOF_WORD64
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Word64
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Word64# -> Word64
W64# (ByteArray# -> Int# -> Word64#
indexWord8ArrayAsWord64# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word64 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Word64# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word64# #)
readWord8ArrayAsWord64# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Word64#
w# #) -> (# State# s
s1, Word64# -> Word64
W64# Word64#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word64 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (W64# Word64#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Word64# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Word64# -> State# d -> State# d
writeWord8ArrayAsWord64# MutableByteArray# s
arr# Int#
os# Word64#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Word64
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Word64# -> Word64
W64# (Addr# -> Int# -> Word64#
indexWord8OffAddrAsWord64# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word64 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Word64# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Word64# #)
readWord8OffAddrAsWord64# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Word64#
w# #) -> (# State# s
s1, Word64# -> Word64
W64# Word64#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Word64 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (W64# Word64#
w#) State# s
s# =
        Addr# -> Int# -> Word64# -> State# s -> State# s
forall d. Addr# -> Int# -> Word64# -> State# d -> State# d
writeWord8OffAddrAsWord64# Addr#
addr# Int#
os# Word64#
w# State# s
s#

instance Prim' Int8 where
    type SizeOf Int8 = SIZEOF_INT8
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Int8
indexWord8ByteArrayAs# = ByteArray# -> Int# -> Int8
forall a. Prim a => ByteArray# -> Int# -> a
P.indexByteArray#
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int8 #)
readWord8ByteArrayAs#  = MutableByteArray# s -> Int# -> State# s -> (# State# s, Int8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
P.readByteArray#
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int8 -> State# s -> State# s
writeWord8ByteArrayAs# = MutableByteArray# s -> Int# -> Int8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Int8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
P.writeByteArray#
    indexWord8OffAddrAs# :: Addr# -> Int# -> Int8
indexWord8OffAddrAs#   = Addr# -> Int# -> Int8
forall a. Prim a => Addr# -> Int# -> a
P.indexOffAddr#
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int8 #)
readWord8OffAddrAs#    = Addr# -> Int# -> State# s -> (# State# s, Int8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Int8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
P.readOffAddr#
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Int8 -> State# s -> State# s
writeWord8OffAddrAs#   = Addr# -> Int# -> Int8 -> State# s -> State# s
forall s. Addr# -> Int# -> Int8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
P.writeOffAddr#

instance Prim' Int16 where
    type SizeOf Int16 = SIZEOF_INT16
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Int16
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Int16# -> Int16
I16# (ByteArray# -> Int# -> Int16#
indexWord8ArrayAsInt16# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int16 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Int16# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int16# #)
readWord8ArrayAsInt16# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Int16#
w# #) -> (# State# s
s1, Int16# -> Int16
I16# Int16#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int16 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (I16# Int16#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Int16# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Int16# -> State# d -> State# d
writeWord8ArrayAsInt16# MutableByteArray# s
arr# Int#
os# Int16#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Int16
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Int16# -> Int16
I16# (Addr# -> Int# -> Int16#
indexWord8OffAddrAsInt16# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int16 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Int16# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Int16# #)
readWord8OffAddrAsInt16# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Int16#
w# #) -> (# State# s
s1, Int16# -> Int16
I16# Int16#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Int16 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (I16# Int16#
w#) State# s
s# =
        Addr# -> Int# -> Int16# -> State# s -> State# s
forall d. Addr# -> Int# -> Int16# -> State# d -> State# d
writeWord8OffAddrAsInt16# Addr#
addr# Int#
os# Int16#
w# State# s
s#

instance Prim' Int32 where
    type SizeOf Int32 = SIZEOF_INT32
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Int32
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Int32# -> Int32
I32# (ByteArray# -> Int# -> Int32#
indexWord8ArrayAsInt32# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int32 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Int32# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int32# #)
readWord8ArrayAsInt32# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Int32#
w# #) -> (# State# s
s1, Int32# -> Int32
I32# Int32#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int32 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (I32# Int32#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Int32# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Int32# -> State# d -> State# d
writeWord8ArrayAsInt32# MutableByteArray# s
arr# Int#
os# Int32#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Int32
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Int32# -> Int32
I32# (Addr# -> Int# -> Int32#
indexWord8OffAddrAsInt32# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int32 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Int32# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Int32# #)
readWord8OffAddrAsInt32# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Int32#
w# #) -> (# State# s
s1, Int32# -> Int32
I32# Int32#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Int32 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (I32# Int32#
w#) State# s
s# =
        Addr# -> Int# -> Int32# -> State# s -> State# s
forall d. Addr# -> Int# -> Int32# -> State# d -> State# d
writeWord8OffAddrAsInt32# Addr#
addr# Int#
os# Int32#
w# State# s
s#

instance Prim' Int64 where
    type SizeOf Int64 = SIZEOF_INT64
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Int64
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Int64# -> Int64
I64# (ByteArray# -> Int# -> Int64#
indexWord8ArrayAsInt64# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64 #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int64# #)
readWord8ArrayAsInt64# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Int64#
w# #) -> (# State# s
s1, Int64# -> Int64
I64# Int64#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int64 -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (I64# Int64#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Int64# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Int64# -> State# d -> State# d
writeWord8ArrayAsInt64# MutableByteArray# s
arr# Int#
os# Int64#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Int64
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Int64# -> Int64
I64# (Addr# -> Int# -> Int64#
indexWord8OffAddrAsInt64# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int64 #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Int64# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Int64# #)
readWord8OffAddrAsInt64# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Int64#
w# #) -> (# State# s
s1, Int64# -> Int64
I64# Int64#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Int64 -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (I64# Int64#
w#) State# s
s# =
        Addr# -> Int# -> Int64# -> State# s -> State# s
forall d. Addr# -> Int# -> Int64# -> State# d -> State# d
writeWord8OffAddrAsInt64# Addr#
addr# Int#
os# Int64#
w# State# s
s#

instance Prim' Word where
    type SizeOf Word = SIZEOF_HSWORD
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Word
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Word# -> Word
W# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Word# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Word#
w# #) -> (# State# s
s1, Word# -> Word
W# Word#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (W# Word#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Word# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
writeWord8ArrayAsWord# MutableByteArray# s
arr# Int#
os# Word#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Word
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Word# -> Word
W# (Addr# -> Int# -> Word#
indexWord8OffAddrAsWord# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Word# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Word# #)
readWord8OffAddrAsWord# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Word#
w# #) -> (# State# s
s1, Word# -> Word
W# Word#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Word -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (W# Word#
w#) State# s
s# =
        Addr# -> Int# -> Word# -> State# s -> State# s
forall d. Addr# -> Int# -> Word# -> State# d -> State# d
writeWord8OffAddrAsWord# Addr#
addr# Int#
os# Word#
w# State# s
s#

instance Prim' Int where
    type SizeOf Int = SIZEOF_HSINT
    indexWord8ByteArrayAs# :: ByteArray# -> Int# -> Int
indexWord8ByteArrayAs# ByteArray#
arr# Int#
os# = Int# -> Int
I# (ByteArray# -> Int# -> Int#
indexWord8ArrayAsInt# ByteArray#
arr# Int#
os#)
    readWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int #)
readWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# = \State# s
s0 ->
        case MutableByteArray# s -> Int# -> State# s -> (# State# s, Int# #)
forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int# #)
readWord8ArrayAsInt# MutableByteArray# s
arr# Int#
os# State# s
s0 of
          (# State# s
s1, Int#
w# #) -> (# State# s
s1, Int# -> Int
I# Int#
w# #)
    writeWord8ByteArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int -> State# s -> State# s
writeWord8ByteArrayAs# MutableByteArray# s
arr# Int#
os# (I# Int#
w#) = \State# s
s0 ->
        MutableByteArray# s -> Int# -> Int# -> State# s -> State# s
forall d.
MutableByteArray# d -> Int# -> Int# -> State# d -> State# d
writeWord8ArrayAsInt# MutableByteArray# s
arr# Int#
os# Int#
w# State# s
s0
    indexWord8OffAddrAs# :: Addr# -> Int# -> Int
indexWord8OffAddrAs# Addr#
addr# Int#
os# = Int# -> Int
I# (Addr# -> Int# -> Int#
indexWord8OffAddrAsInt# Addr#
addr# Int#
os#)
    readWord8OffAddrAs# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int #)
readWord8OffAddrAs# Addr#
addr# Int#
os# = \State# s
s0 ->
        case Addr# -> Int# -> State# s -> (# State# s, Int# #)
forall d. Addr# -> Int# -> State# d -> (# State# d, Int# #)
readWord8OffAddrAsInt# Addr#
addr# Int#
os# State# s
s0 of
          (# State# s
s1, Int#
w# #) -> (# State# s
s1, Int# -> Int
I# Int#
w# #)
    writeWord8OffAddrAs# :: forall s. Addr# -> Int# -> Int -> State# s -> State# s
writeWord8OffAddrAs# Addr#
addr# Int#
os# (I# Int#
w#) State# s
s# =
        Addr# -> Int# -> Int# -> State# s -> State# s
forall d. Addr# -> Int# -> Int# -> State# d -> State# d
writeWord8OffAddrAsInt# Addr#
addr# Int#
os# Int#
w# State# s
s#