array-builder-0.1.1.0: src-pre-8.9/Compat.hs
{-# language MagicHash #-}
{-# language UnboxedTuples #-}
module Compat
( unsafeShrinkAndFreeze
, unsafeShrinkAndFreeze#
) where
import Control.Monad.ST (ST)
import Data.Primitive (SmallArray,SmallMutableArray)
import GHC.Exts (SmallArray#,SmallMutableArray#,Int#,State#)
import qualified Data.Primitive as PM
import qualified GHC.Exts as Exts
-- Shrink the mutable array in place and then freeze it.
-- The argument must not be reused after being passed to
-- this function.
unsafeShrinkAndFreeze ::
SmallMutableArray s a
-> Int
-> ST s (SmallArray a)
{-# inline unsafeShrinkAndFreeze #-}
unsafeShrinkAndFreeze arr = PM.freezeSmallArray arr 0
unsafeShrinkAndFreeze# ::
SmallMutableArray# s a
-> Int#
-> State# s
-> (# State# s, SmallArray# a #)
{-# inline unsafeShrinkAndFreeze# #-}
unsafeShrinkAndFreeze# x n s0 =
Exts.freezeSmallArray# x 0# n s0