module StateIdentifiers where import SplittingTree import Trie qualified import Data.Map.Strict qualified as Map stateIdentifierFor :: (Ord i, Ord s) => s -> Partition s -> SplittingTree s i o -> Trie.Trie i stateIdentifierFor state Partition{..} SplittingTree{..} = go firstNode where firstNode = fst <$> blockParent Map.!? (getPartition Map.! state) getParent n = fst <$> innerParent Map.!? n go Nothing = Trie.empty go (Just n) = Trie.insert (label Map.! n) (go (getParent n))