stm-hamt-1: library/StmHamt/Types.hs
{-# OPTIONS_GHC -funbox-strict-fields #-}
module StmHamt.Types where
import StmHamt.Prelude
{-|
STM-specialized Hash Array Mapped Trie,
extended with its size-tracking functionality,
allowing for a fast 'size' operation.
-}
data SizedHamt element = SizedHamt !(Hamt element) !(TVar Int)
{-|
STM-specialized Hash Array Mapped Trie.
-}
newtype Hamt element = Hamt (TVar (SparseSmallArray (Branch element)))
data Branch element = BranchesBranch !(Hamt element) | LeavesBranch !Int !(SmallArray element)