basics-0.2.0.0: src/Basics/Word.hs
{-# language DataKinds #-}
{-# language MagicHash #-}
{-# language UnboxedTuples #-}
module Basics.Word
( -- Types
T
, T#
, R
-- Lifting
, lift
, unlift
-- Arithmetic
, plus
, minus
, plus#
, minus#
, times#
, quot#
, rem#
-- Compare
, gt#
, lt#
, gte#
, lte#
, eq#
, neq#
-- Array
, readByteArray#
, writeByteArray#
, indexByteArray#
, shrink#
-- Metadata
, signed
, size
) where
import GHC.Exts
import qualified GHC.Exts as Exts
import qualified Foreign.Storable as FS
type T = Word
type T# = Word#
type R = 'WordRep
size :: Int
size = FS.sizeOf (undefined :: Word)
signed :: Bool
signed = False
lift :: T# -> T
lift = W#
unlift :: T -> T#
unlift (W# i) = i
plus :: T -> T -> T
plus (W# x) (W# y) = W# (plusWord# x y)
minus :: T -> T -> T
minus (W# x) (W# y) = W# (minusWord# x y)
times# :: T# -> T# -> T#
times# = timesWord#
quot# :: T# -> T# -> T#
quot# = quotWord#
rem# :: T# -> T# -> T#
rem# = remWord#
plus# :: T# -> T# -> T#
plus# = plusWord#
minus# :: T# -> T# -> T#
minus# = minusWord#
gt# :: T# -> T# -> Int#
gt# = gtWord#
lt# :: T# -> T# -> Int#
lt# = ltWord#
gte# :: T# -> T# -> Int#
gte# = geWord#
lte# :: T# -> T# -> Int#
lte# = leWord#
eq# :: T# -> T# -> Int#
eq# = eqWord#
neq# :: T# -> T# -> Int#
neq# = neWord#
indexByteArray# :: ByteArray# -> Int# -> T#
indexByteArray# = indexWordArray#
readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, T# #)
readByteArray# = readWordArray#
writeByteArray# :: MutableByteArray# s -> Int# -> T# -> State# s -> State# s
writeByteArray# = writeWordArray#
shrink# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, MutableByteArray# s #)
shrink# m i s0 = (# Exts.shrinkMutableByteArray# m (i *# (case size of I# sz -> sz)) s0, m #)