-- | Execute the computation wrapped in a SymbolsT monad transformer.
runSymbolsT :: Monad m =>
               SymbolsT m a
            -- ^ The SymbolsT monad to execute.
            -> (Symbol, Symbol)
            -- ^ The low and high range of the symbols.  The lowest
            -- index is used as the index of the null symbol.
            -> [(Symbol, ByteString)]
            -- ^ The mapping of symbols to indexes.  The mapping to the
            -- lowest index is taken as the null symbol.
            -> m a
runSymbolsT s bound = runReaderT (unpackSymbolsT s) . array bound
runSymbolsT :: Monad m =>
               SymbolsT m a
            -- ^ The SymbolsT monad to execute.
            -> (Symbol, Symbol)
            -- ^ The low and high range of the symbols.  The lowest
            -- index is used as the index of the null symbol.
            -> [(Symbol, ByteString)]
            -- ^ The mapping of symbols to indexes.  The mapping to the
            -- lowest index is taken as the null symbol.
            -> m a
runSymbolsT s bound = runReaderT (unpackSymbolsT s) . array bound
runSymbolsT s bound = runReaderT (unpackSymbolsT s) . array bound