{-# OPTIONS_GHC -fglasgow-exts -fallow-overlapping-instances #-}
module PIL.Repr.P6Scalar (P6Scalar, create, prims) where
import PIL.Native.Types
import PIL.Native.Coerce
import PIL.Repr.Internals
type P6Scalar = TVar Native
create :: Native -> STM P6Scalar
create = newTVar
prims :: MapOf (P6Scalar -> ObjectPrim)
prims = mkMap
[ prim "fetch" readTVar
, prim "store" writeTVar
, prim "as_bit" asBit
, prim "as_int" asInt
, prim "as_num" asNum
, prim "as_str" asStr
]
asBit :: P6Scalar -> STM NativeBit
asBit = coerceAs
asInt :: P6Scalar -> STM NativeInt
asInt = coerceAs
asNum :: P6Scalar -> STM NativeNum
asNum = coerceAs
asStr :: P6Scalar -> STM NativeStr
asStr = coerceAs
coerceAs :: IsNative a => P6Scalar -> STM a
coerceAs = fmap fromNative . readTVar