
Hello. I'm just starting out with Parsec and Haskell, and I want to parse a very simple grammar with it. I think I may not understand how to use try correctly. Here's a simplified version of my grammar: myType = try (primitiveType) <|> arrayType primitiveType = do {reserved "int"; return "primitive"} arrayType = do { primitiveType; symbol "["; symbol "]"; return "array"} Basically, I want to use lookahead to produce the result "array" on inputs like "int[]" and the result "primitive" on inputs like "int". However, no matter what I do with the try function, I am not able to get what I expect. When I run this code using the runLex function described in the Parsec documentation, it chokes on "int[]", saying that the '[' character was unexpected. I've discovered that switching the order of primitiveType and arrayType solves this, which makes sense, but I still expected it to be possible to use try() in this manner to resolve the error with lookahead. Am I doing something wrong? (I've got some boilerplate code form the Parsec documentation defined as well, but I didn't include it for brevity's sake. Reserved and symbol are defined how you'd expect.)