[Haskell-cafe] Re: Parsec problem

Christian Maeder maeder at tzi.de
Wed Jun 6 04:56:14 EDT 2007


Neil Mitchell schrieb:
> Hi,
> 
> I'm using parsec to parse something which is either a "name" or a
> "type". The particular test string I'm using is a type, but isn't a
> name. I want things to default to "name" before "type".
> 
> Some examples of the parsec function, and the result when applied to a
> test string:
> 
>> parsecQuery = do spaces ; types
> Right Query {scope = [], names = [], typeSig = Just [a], items = [],
> flags = []}
> 
>> parsecQuery = do spaces ; names
> Left (line 1, column 1):
> unexpected "["
> expecting white space, "--", "/", "(", letter, "::" or end of input
> 
>> parsecQuery = do spaces ; try names <|> types
> Left (line 1, column 1):
> unexpected "["
> expecting white space, "--", "/", "(", letter, "::" or end of input
> 
> I would have expected try names <|> types to return a Right (since
> types matches), but it doesn't. I assumed this would be a property of
> Parsec, but it doesn't appear to hold. Can anyone shed any light?

I suppose "names" or "try names" succeeds without consuming input, but
calling parsecQuery fails for another reason that you haven't shown,

C.


More information about the Haskell-Cafe mailing list