Hi,

I'm writing a simple parser for a line-oriented language using Parsec. A group of lines is parsed by a parser that tokens are of type String. Each token is again parsed by a parser that tokens are of type Char (i.e. this parser has the Parsec type Parser a).

Now I wrote a transforming function that converts a char parser to a line parser by running the char parser on the current token of the line parser and accepting the token, if the char parser did not fail:

    type LineParser = GenParser String () a

    toLineParser :: Parser a -> LineParser a
    toLineParser p = tokenPrim showLine nextPos testLine
        <?> "how to get the inner error message???"
        where
            showLine l         = "\": " ++ l ++ "\""
            nextPos pos t rest = incSourceLine pos 1
            testLine l         = case parse p "" l of
                                     Left msg   -> Nothing
                                     Right res  -> Just res

My problem is to extract the possible error message of the inner char parser (msg) and pass it to the outer line parser. Maybe using tokenPrim is no the best approach here. Someone how can help me with that problem?


Besh wishes,

Maciej
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to