{-# LANGUAGE MagicHash, ForeignFunctionInterface, GHCForeignImportPrim, UnliftedFFITypes #-} module GHC.Prim.Array ( consArray# , snocArray# , snocArrayWithPadding# , insertArray# , deleteArray# ) where import GHC.Prim import GHC.Types foreign import prim "snocArray" snocArray_ :: Array# a -> Any -> Array# a foreign import prim "snocArrayWithPadding" snocArrayWithPadding_ :: Int# -> Any -> Array# a -> Any -> Array# a foreign import prim "insertArray" insertArray_ :: Int# -> Any -> Array# a -> Array# a -- | Delete element at position. foreign import prim "deleteArray" deleteArray# :: Int# -> Array# a -> Array# a foreign import prim "consArray" consArray_ :: Any -> Array# a -> Array# a -- | Prepend an element to an array. consArray# :: a -> Array# a -> Array# a consArray# a arr = consArray_ (unsafeCoerce# a) arr {-# inline consArray# #-} -- | Append an element to the end of an array. snocArray# :: Array# a -> a -> Array# a snocArray# arr a = snocArray_ arr (unsafeCoerce# a) {-# inline snocArray# #-} -- | Append an element to the array and pad the end with another element. -- The first argument is the size of the padding, the second is the pad element. snocArrayWithPadding# :: Int# -> a -> Array# a -> a -> Array# a snocArrayWithPadding# pad padElem arr a = snocArrayWithPadding_ pad (unsafeCoerce# padElem) arr (unsafeCoerce# a) {-# inline snocArrayWithPadding# #-} -- | Insert new element at position. insertArray# :: Int# -> a -> Array# a -> Array# a insertArray# i a arr = insertArray_ i (unsafeCoerce# a) arr {-# inline insertArray# #-}