[Haskell-beginners] Parsec problem

Kees Bleijenberg k.bleijenberg at lijbrandt.nl
Sun Feb 3 10:28:57 CET 2013


Hi,

 

> module Main(main) where 

> 

> import Text.ParserCombinators.Parsec

> 

> parseToNewLine = do

>                     line <- manyTill anyChar newline

>                     return line

> 

> keyValue = do

>                     fieldName <- many letter 

>                     spaces

>                     char '='

>                     spaces

>                     fieldValue <- parseToNewLine 

>                     return (fieldName,fieldValue)

> 

> main = parseTest keyValue "key=\n"

> 

> I don’t understand why te code above doesn’t parse to (“key”,””)

 

Because the newline is already consumed by the `spaces`. So parseToNewLine gets an empty string as input, and fails on that.

 

> parseToNewLine “\n” parses to “"

> 

> parseTest keyValue “a=b\n” works fine and parses to (“a”,”b”) 

 

The input of parseToNewLine must contain a newline, or it fails. In the last example, the `spaces` after `char '='` stops at reaching the 'b', so the newline remains. In the first (problematic) example, all the remaining input after the '=' consists of whitespace.

Thanks. This solves it.  spaces does more then just reading spaces.

Kees

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130203/042675ca/attachment-0001.htm>


More information about the Beginners mailing list