{-# LANGUAGE RankNTypes #-}
module Singular.Registry.Trie
(
TrieManager (..)
, Trie (..)
) where
import Data.ByteString (ByteString)
import Singular.Registry.Ledger (Root, TokenId)
import Singular.Registry.Types (ProofStep)
data TrieManager m = TrieManager
{ forall (m :: * -> *).
TrieManager m -> forall a. TokenId -> (Trie m -> m a) -> m a
withTrie
:: forall a
. TokenId
-> (Trie m -> m a)
-> m a
, forall (m :: * -> *).
TrieManager m
-> forall a.
TokenId -> (forall (n :: * -> *). Monad n => Trie n -> n a) -> m a
withSpeculativeTrie
:: forall a
. TokenId
-> ( forall n
. (Monad n)
=> Trie n
-> n a
)
-> m a
, forall (m :: * -> *). TrieManager m -> TokenId -> m ()
createTrie :: TokenId -> m ()
, forall (m :: * -> *). TrieManager m -> TokenId -> m ()
deleteTrie :: TokenId -> m ()
, forall (m :: * -> *). TrieManager m -> TokenId -> m ()
hideTrie :: TokenId -> m ()
, forall (m :: * -> *). TrieManager m -> TokenId -> m ()
unhideTrie :: TokenId -> m ()
}
data Trie m = Trie
{ forall (m :: * -> *). Trie m -> ByteString -> ByteString -> m Root
insert
:: ByteString -> ByteString -> m Root
, forall (m :: * -> *). Trie m -> ByteString -> m Root
delete :: ByteString -> m Root
, forall (m :: * -> *). Trie m -> ByteString -> m (Maybe ByteString)
lookup :: ByteString -> m (Maybe ByteString)
, forall (m :: * -> *). Trie m -> m Root
getRoot :: m Root
, forall (m :: * -> *). Trie m -> ByteString -> m (Maybe [ProofStep])
getProofSteps
:: ByteString -> m (Maybe [ProofStep])
}