-- | Execute the computation wrapped in a PositionsT monad transformer.
runPositionsT :: Monad m =>
                 PositionsT m a
                 -- ^ The PositionsT monad to execute.
                 -> (Point, Point)
                 -- ^ The low and high range of the symbols.  The lowest
                 -- index is used as the index of the null symbol.
                 -> [(Point, PointInfo)]
                 -- ^ The mapping of symbols to indexes.  The mapping to the
                 -- lowest index is taken as the null symbol.
                 -> (Filename, Filename)
                 -- ^ The low and high range of the symbols.
                 -> [(Filename, FileInfo)]
                 -- ^ The mapping of symbols.  The mapping to the lowest
                 -- index is taken as the null symbol.
                 -> m a
runPositionsT s posbounds positions filebounds file =
  runReaderT (unpackPositionsT s)
             Info { pointInfoArray = array posbounds positions,
                    fileInfoArray = array filebounds file }
runPositionsT :: Monad m =>
                 PositionsT m a
                 -- ^ The PositionsT monad to execute.
                 -> (Point, Point)
                 -- ^ The low and high range of the symbols.  The lowest
                 -- index is used as the index of the null symbol.
                 -> [(Point, PointInfo)]
                 -- ^ The mapping of symbols to indexes.  The mapping to the
                 -- lowest index is taken as the null symbol.
                 -> (Filename, Filename)
                 -- ^ The low and high range of the symbols.
                 -> [(Filename, FileInfo)]
                 -- ^ The mapping of symbols.  The mapping to the lowest
                 -- index is taken as the null symbol.
                 -> m a
runPositionsT s posbounds positions filebounds file =
  runReaderT (unpackPositionsT s)
             Info { pointInfoArray = array posbounds positions,
                    fileInfoArray = array filebounds file }
runPositionsT s posbounds positions filebounds file =
  runReaderT (unpackPositionsT s)
             Info { pointInfoArray = array posbounds positions,
                    fileInfoArray = array filebounds file }