module MCSP.Data.RadixTree (
RadixTree,
Map.RadixTreeMap,
empty,
construct,
member,
findMin,
findMax,
insert,
union,
delete,
) where
import Data.Bool (Bool)
import Data.Function ((.))
import Data.List (map)
import Data.Maybe (Maybe)
import Data.Ord (Ord)
import MCSP.Data.Pair (dupe)
import MCSP.Data.RadixTree.Map qualified as Map
import MCSP.Data.String (String)
type RadixTree a = Map.RadixTreeMap a (String a)
empty :: RadixTree a
empty :: forall a. RadixTree a
empty = RadixTreeMap a (String a)
forall a v. RadixTreeMap a v
Map.empty
{-# INLINE empty #-}
construct :: Ord a => [String a] -> RadixTree a
construct :: forall a. Ord a => [String a] -> RadixTree a
construct = [(String a, String a)] -> RadixTreeMap a (String a)
forall a v. Ord a => [(String a, v)] -> RadixTreeMap a v
Map.construct ([(String a, String a)] -> RadixTreeMap a (String a))
-> ([String a] -> [(String a, String a)])
-> [String a]
-> RadixTreeMap a (String a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String a -> (String a, String a))
-> [String a] -> [(String a, String a)]
forall a b. (a -> b) -> [a] -> [b]
map String a -> (String a, String a)
forall a. a -> (a, a)
dupe
{-# INLINEABLE construct #-}
member :: Ord a => String a -> RadixTree a -> Bool
member :: forall a. Ord a => String a -> RadixTree a -> Bool
member = String a -> RadixTreeMap a (String a) -> Bool
forall a v. Ord a => String a -> RadixTreeMap a v -> Bool
Map.member
{-# INLINE member #-}
findMin :: RadixTree a -> Maybe (String a)
findMin :: forall a. RadixTree a -> Maybe (String a)
findMin = RadixTreeMap a (String a) -> Maybe (String a)
forall a v. RadixTreeMap a v -> Maybe v
Map.lookupMin
{-# INLINE findMin #-}
findMax :: RadixTree a -> Maybe (String a)
findMax :: forall a. RadixTree a -> Maybe (String a)
findMax = RadixTreeMap a (String a) -> Maybe (String a)
forall a v. RadixTreeMap a v -> Maybe v
Map.lookupMax
{-# INLINE findMax #-}
insert :: Ord a => String a -> RadixTree a -> RadixTree a
insert :: forall a. Ord a => String a -> RadixTree a -> RadixTree a
insert String a
s = String a
-> String a
-> RadixTreeMap a (String a)
-> RadixTreeMap a (String a)
forall a v.
Ord a =>
String a -> v -> RadixTreeMap a v -> RadixTreeMap a v
Map.insert String a
s String a
s
{-# INLINE insert #-}
union :: Ord a => RadixTree a -> RadixTree a -> RadixTree a
union :: forall a. Ord a => RadixTree a -> RadixTree a -> RadixTree a
union = RadixTreeMap a (String a)
-> RadixTreeMap a (String a) -> RadixTreeMap a (String a)
forall a v.
Ord a =>
RadixTreeMap a v -> RadixTreeMap a v -> RadixTreeMap a v
Map.union
{-# INLINE union #-}
delete :: Ord a => String a -> RadixTree a -> RadixTree a
delete :: forall a. Ord a => String a -> RadixTree a -> RadixTree a
delete = String a -> RadixTreeMap a (String a) -> RadixTreeMap a (String a)
forall a v.
Ord a =>
String a -> RadixTreeMap a v -> RadixTreeMap a v
Map.delete
{-# INLINE delete #-}