module Data.BTree.Impure (
Tree(..)
, Node(..)
, empty
, fromList
, fromMap
, insert
, insertMany
, delete
, lookup
, lookupMin
, lookupMax
, foldr
, foldrM
, foldrWithKey
, foldrWithKeyM
, foldMap
, toList
) where
import Prelude hiding (lookup, foldr, foldMap)
import Data.Map (Map)
import qualified Data.Map as M
import Data.BTree.Alloc.Class
import Data.BTree.Impure.Internal.Delete (delete)
import Data.BTree.Impure.Internal.Structures (Tree(..), Node(..))
import Data.BTree.Impure.Internal.Fold (foldr, foldrM, foldrWithKey, foldrWithKeyM, foldMap, toList)
import Data.BTree.Impure.Internal.Insert (insert, insertMany)
import Data.BTree.Impure.Internal.Lookup (lookup, lookupMin, lookupMax)
import Data.BTree.Primitives
empty :: Tree k v
empty = Tree zeroHeight Nothing
fromList :: (AllocM m, Key k, Value v)
=> [(k, v)]
-> m (Tree k v)
fromList = fromMap . M.fromList
fromMap :: (AllocM m, Key k, Value v)
=> Map k v
-> m (Tree k v)
fromMap kvs = insertMany kvs empty