Parsing for
ruleForConstruct = rule "for construct" $ do symbol "for" list <- maybeParens ruleExpression optional ruleComma block <- ruleBlockLiteral retSyn "for" [list, block]
- optional means try something out
- if it wasn't found, don't fail the current rule but don't consume anything
- skip what did parse though
- In Perl 5 regexps: /(?:,)?/