runLexer :: SourceName -> String -> Either ParseError [Pos Token]
runLexer source input = runEither $ do
    raw <- hoistEither $ runParser murex [] source input
    return $ sanityCheck raw
    hoistEither $ postprocess raw
--TODO preprocess literate input (bird foot to space, blank out lines that don't start w/ birdfeet)
runLexer :: SourceName -> String -> Either ParseError [Pos Token]
runLexer source input = runEither $ do
    raw <- hoistEither $ runParser murex [] source input
    return $ sanityCheck raw
    hoistEither $ postprocess raw
--TODO preprocess literate input (bird foot to space, blank out lines that don't start w/ birdfeet)
runLexer source input = runEither $ do
    raw <- hoistEither $ runParser murex [] source input
    return $ sanityCheck raw
    hoistEither $ postprocess raw
--TODO preprocess literate input (bird foot to space, blank out lines that don't start w/ birdfeet)