module JavaScript.TypedArray.ArrayBuffer.ST ( STArrayBuffer , freeze, unsafeFreeze , thaw, unsafeThaw ) where import Control.Monad.ST import GHC.Types import GHC.Exts import GHC.ST import JavaScript.TypedArray.ArrayBuffer.Internal create :: Int -> ST s (STArrayBuffer s) create n = fmap SomeArrayBuffer $ ST (js_create n) {-# INLINE create #-} freeze :: STArrayBuffer s -> ST s ArrayBuffer freeze (SomeArrayBuffer b) = fmap SomeArrayBuffer (ST (js_slice1 0 b)) {-# INLINE freeze #-} unsafeFreeze :: STArrayBuffer s -> ST s ArrayBuffer unsafeFreeze (SomeArrayBuffer b) = pure (SomeArrayBuffer b) {-# INLINE unsafeFreeze #-} {- | Create an 'STArrayBuffer' by copying an immutable 'ArrayBuffer' -} thaw :: ArrayBuffer -> ST s (STArrayBuffer s) thaw (SomeArrayBuffer b) = fmap SomeArrayBuffer (ST (js_slice1 0 b)) {-# INLINE thaw #-} unsafeThaw :: ArrayBuffer -> ST s (STArrayBuffer s) unsafeThaw (SomeArrayBuffer b) = pure (SomeArrayBuffer b) {-# INLINE unsafeThaw #-}