primal-0.3.0.0: Primeval world of Haskell.
Copyright(c) Alexey Kuleshevich 2020
LicenseBSD3
MaintainerAlexey Kuleshevich <alexey@kuleshevi.ch>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.Prim.Atom

Description

 
Synopsis

Documentation

newtype Atom a Source #

Constructors

Atom 

Fields

Instances

Instances details
Enum a => Enum (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

succ :: Atom a -> Atom a #

pred :: Atom a -> Atom a #

toEnum :: Int -> Atom a #

fromEnum :: Atom a -> Int #

enumFrom :: Atom a -> [Atom a] #

enumFromThen :: Atom a -> Atom a -> [Atom a] #

enumFromTo :: Atom a -> Atom a -> [Atom a] #

enumFromThenTo :: Atom a -> Atom a -> Atom a -> [Atom a] #

Eq a => Eq (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

(==) :: Atom a -> Atom a -> Bool #

(/=) :: Atom a -> Atom a -> Bool #

Floating a => Floating (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

pi :: Atom a #

exp :: Atom a -> Atom a #

log :: Atom a -> Atom a #

sqrt :: Atom a -> Atom a #

(**) :: Atom a -> Atom a -> Atom a #

logBase :: Atom a -> Atom a -> Atom a #

sin :: Atom a -> Atom a #

cos :: Atom a -> Atom a #

tan :: Atom a -> Atom a #

asin :: Atom a -> Atom a #

acos :: Atom a -> Atom a #

atan :: Atom a -> Atom a #

sinh :: Atom a -> Atom a #

cosh :: Atom a -> Atom a #

tanh :: Atom a -> Atom a #

asinh :: Atom a -> Atom a #

acosh :: Atom a -> Atom a #

atanh :: Atom a -> Atom a #

log1p :: Atom a -> Atom a #

expm1 :: Atom a -> Atom a #

log1pexp :: Atom a -> Atom a #

log1mexp :: Atom a -> Atom a #

Fractional a => Fractional (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

(/) :: Atom a -> Atom a -> Atom a #

recip :: Atom a -> Atom a #

fromRational :: Rational -> Atom a #

Integral a => Integral (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

quot :: Atom a -> Atom a -> Atom a #

rem :: Atom a -> Atom a -> Atom a #

div :: Atom a -> Atom a -> Atom a #

mod :: Atom a -> Atom a -> Atom a #

quotRem :: Atom a -> Atom a -> (Atom a, Atom a) #

divMod :: Atom a -> Atom a -> (Atom a, Atom a) #

toInteger :: Atom a -> Integer #

Num a => Num (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

(+) :: Atom a -> Atom a -> Atom a #

(-) :: Atom a -> Atom a -> Atom a #

(*) :: Atom a -> Atom a -> Atom a #

negate :: Atom a -> Atom a #

abs :: Atom a -> Atom a #

signum :: Atom a -> Atom a #

fromInteger :: Integer -> Atom a #

Ord a => Ord (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

compare :: Atom a -> Atom a -> Ordering #

(<) :: Atom a -> Atom a -> Bool #

(<=) :: Atom a -> Atom a -> Bool #

(>) :: Atom a -> Atom a -> Bool #

(>=) :: Atom a -> Atom a -> Bool #

max :: Atom a -> Atom a -> Atom a #

min :: Atom a -> Atom a -> Atom a #

Real a => Real (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

toRational :: Atom a -> Rational #

RealFloat a => RealFloat (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

RealFrac a => RealFrac (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

properFraction :: Integral b => Atom a -> (b, Atom a) #

truncate :: Integral b => Atom a -> b #

round :: Integral b => Atom a -> b #

ceiling :: Integral b => Atom a -> b #

floor :: Integral b => Atom a -> b #

Show a => Show (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

showsPrec :: Int -> Atom a -> ShowS #

show :: Atom a -> String #

showList :: [Atom a] -> ShowS #

Bits a => Bits (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

(.&.) :: Atom a -> Atom a -> Atom a #

(.|.) :: Atom a -> Atom a -> Atom a #

xor :: Atom a -> Atom a -> Atom a #

complement :: Atom a -> Atom a #

shift :: Atom a -> Int -> Atom a #

rotate :: Atom a -> Int -> Atom a #

zeroBits :: Atom a #

bit :: Int -> Atom a #

setBit :: Atom a -> Int -> Atom a #

clearBit :: Atom a -> Int -> Atom a #

complementBit :: Atom a -> Int -> Atom a #

testBit :: Atom a -> Int -> Bool #

bitSizeMaybe :: Atom a -> Maybe Int #

bitSize :: Atom a -> Int #

isSigned :: Atom a -> Bool #

shiftL :: Atom a -> Int -> Atom a #

unsafeShiftL :: Atom a -> Int -> Atom a #

shiftR :: Atom a -> Int -> Atom a #

unsafeShiftR :: Atom a -> Int -> Atom a #

rotateL :: Atom a -> Int -> Atom a #

rotateR :: Atom a -> Int -> Atom a #

popCount :: Atom a -> Int #

NFData a => NFData (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

rnf :: Atom a -> () #

Prim a => Prim (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Associated Types

type PrimBase (Atom a) Source #

type SizeOf (Atom a) :: Nat Source #

type Alignment (Atom a) :: Nat Source #

(Bits a, Eq a, Prim a) => AtomicBits (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

Methods

atomicAndFetchOldMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicAndFetchNewMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicNandFetchOldMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicNandFetchNewMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicOrFetchOldMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicOrFetchNewMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicXorFetchOldMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicXorFetchNewMutableByteArray# :: MutableByteArray# s -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicAndFetchOldOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicAndFetchNewOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicNandFetchOldOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicNandFetchNewOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicOrFetchOldOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicOrFetchNewOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicXorFetchOldOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

atomicXorFetchNewOffAddr# :: Addr# -> Int# -> Atom a -> State# s -> (# State# s, Atom a #) Source #

(Num a, Eq a, Prim a) => AtomicCount (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

(Eq a, Prim a) => Atomic (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

type PrimBase (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

type PrimBase (Atom a) = Atom a
type SizeOf (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

type SizeOf (Atom a) = 1 + SizeOf a
type Alignment (Atom a) Source # 
Instance details

Defined in Data.Prim.Atom

type Alignment (Atom a) = 1 + Alignment a

SpinLocks

withLockMutableByteArray :: forall e a m. (Prim e, MonadUnliftPrim RW m) => MutableByteArray# RealWorld -> Int# -> (Atom e -> m (Atom e, a)) -> m a Source #

withLockOffAddr :: forall e b. Prim e => Addr# -> Int# -> (Atom e -> IO (Atom e, b)) -> IO b Source #

Helpers and testing

Count

atomicAddFetchOldOffAddrNum# :: (Num a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicAddFetchNewOffAddrNum# :: (Num a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicSubFetchOldOffAddrNum# :: (Num a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicSubFetchNewOffAddrNum# :: (Num a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

Bits

atomicAndFetchOldOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicAndFetchNewOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicNandFetchOldOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicNandFetchNewOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicOrFetchOldOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicOrFetchNewOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicXorFetchOldOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #

atomicXorFetchNewOffAddrBits# :: (Bits a, Atomic a) => Addr# -> Int# -> a -> State# s -> (# State# s, a #) Source #