{-# language DataKinds #-}
{-# language KindSignatures #-}
{-# language MagicHash #-}
{-# language RankNTypes #-}
{-# language UnboxedTuples #-}
{-# language TypeFamilies #-}

signature Element where

import Data.Kind (Type)
import GHC.Exts (TYPE,RuntimeRep(BoxedRep),Levity(Unlifted),State#,Int#)
import Rep (R)

data A# :: TYPE R -> TYPE ('BoxedRep 'Unlifted)
data M# :: Type -> TYPE R -> TYPE ('BoxedRep 'Unlifted)

unsafeFreeze# :: forall (s :: Type) (a :: TYPE R).
     M# s a
  -> State# s
  -> (# State# s, A# a #)

-- This is a shrink-and-freeze operation
unsafeShrinkFreeze# :: forall (s :: Type) (a :: TYPE R).
     M# s a
  -> Int#
  -> State# s
  -> (# State# s, A# a #)

initialized# :: forall (s :: Type) (a :: TYPE R).
     Int#
  -> a
  -> State# s
  -> (# State# s, M# s a #)

index# :: forall (a :: TYPE R).
     A# a
  -> Int#
  -> a

write# :: forall (s :: Type) (a :: TYPE R).
     M# s a
  -> Int#
  -> a
  -> State# s
  -> State# s

set# :: forall (s :: Type) (a :: TYPE R).
     M# s a
  -> Int#
  -> Int#
  -> a
  -> State# s
  -> State# s

thaw# :: forall (s :: Type) (a :: TYPE R).
     A# a
  -> Int#
  -> Int#
  -> State# s
  -> (# State# s, M# s a #)