runFrontendT :: MonadIO m => FrontendT pos tok m a
          -> [(ByteString, pos -> tok)]
          -> m a
runFrontendT lexer keywords =
  let
    commentbuffer = runKeywordsT lexer keywords
    srcbuf = runCommentBufferT commentbuffer
    genpos = runSourceBufferT srcbuf
    gensym = startGenposT genpos
  in
    startGensymT gensym
runFrontendT :: MonadIO m => FrontendT pos tok m a
          -> [(ByteString, pos -> tok)]
          -> m a
runFrontendT lexer keywords =
  let
    commentbuffer = runKeywordsT lexer keywords
    srcbuf = runCommentBufferT commentbuffer
    genpos = runSourceBufferT srcbuf
    gensym = startGenposT genpos
  in
    startGensymT gensym
runFrontendT lexer keywords =
  let
    commentbuffer = runKeywordsT lexer keywords
    srcbuf = runCommentBufferT commentbuffer
    genpos = runSourceBufferT srcbuf
    gensym = startGenposT genpos
  in
    startGensymT gensym