@@ -75,7 +75,7 @@ parseConstructor :: P.Parsec String ParseState Value
7575parseConstructor = Constructor <$> C.properName
7676
7777parseCase :: P.Parsec String ParseState Value
78−parseCase = Case <$> P.between (C.reserved "case") (C.indented *> C.reserved "of") parseValue
78+parseCase = Case <$> P.between (P.try (C.reserved "case")) (C.indented *> C.reserved "of") parseValue
7979 <*> (C.indented *> C.mark (P.many (C.same *> C.mark parseCaseAlternative)))
8080
8181parseCaseAlternative :: P.Parsec String ParseState (Binder, Value)
@@ -84,30 +84,30 @@ parseCaseAlternative = (,) <$> (parseGuardedBinder <* C.lexeme (P.string "->"))
8484 P.<?> "case alternative"
8585
8686parseIfThenElse :: P.Parsec String ParseState Value
87−parseIfThenElse = IfThenElse <$> (C.reserved "if" *> C.indented *> parseValue)
87+parseIfThenElse = IfThenElse <$> (P.try (C.reserved "if") *> C.indented *> parseValue)
8888 <*> (C.indented *> C.reserved "then" *> C.indented *> parseValue)
8989 <*> (C.indented *> C.reserved "else" *> C.indented *> parseValue)
9090
9191parseBlock :: P.Parsec String ParseState Value
92−parseBlock = Block <$> (C.reserved "do" *> parseManyStatements)
92+parseBlock = Block <$> (P.try (C.reserved "do") *> parseManyStatements)
9393
9494parseManyStatements :: P.Parsec String ParseState [Statement]
9595parseManyStatements = C.indented *> C.mark (P.many (C.same *> C.mark parseStatement)) P.<?> "block"
9696
9797parseValueAtom :: P.Parsec String ParseState Value
98−parseValueAtom = C.indented *> P.choice (map P.try
99− [ parseNumericLiteral
100− , parseStringLiteral
101− , parseBooleanLiteral
98+parseValueAtom = C.indented *> P.choice
99+ [ P.try parseNumericLiteral
100+ , P.try parseStringLiteral
101+ , P.try parseBooleanLiteral
102102 , parseArrayLiteral
103103 , parseObjectLiteral
104104 , parseAbs
105− , parseVar
106− , parseConstructor
105+ , P.try parseVar
106+ , P.try parseConstructor
107107 , parseBlock
108108 , parseCase
109109 , parseIfThenElse
110− , C.parens parseValue ])
110+ , C.parens parseValue ]
111111
112112parsePropertyUpdate :: P.Parsec String ParseState (String, Value)
113113parsePropertyUpdate = do
@@ -125,10 +125,10 @@ parseValue = do
125125 where
126126 indexersAndAccessors = C.buildPostfixParser postfixTable1 parseValueAtom
127127 postfixTable1 = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
128− , Indexer <$> (C.indented *> C.squares parseValue)
129− , flip ObjectUpdate <$> (C.indented *> C.braces ((C.indented *> parsePropertyUpdate) `P.sepBy1` (C.indented *> C.comma))) ]
130− postfixTable2 = [ C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2])
131− , flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
128+ , P.try $ Indexer <$> (C.indented *> C.squares parseValue)
129+ , P.try $ flip ObjectUpdate <$> (C.indented *> C.braces ((C.indented *> parsePropertyUpdate) `P.sepBy1` (C.indented *> C.comma))) ]
130+ postfixTable2 = [ P.try (C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2]))
131+ , P.try $ flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
132132 , flip TypedValue <$> (P.try (C.lexeme (C.indented *> P.string "::")) *> parsePolyType) ]
133133 operators user =
134134 [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
@@ -174,7 +174,6 @@ customOperatorTable fixities =
174174 return $ \t1 t2 -> App (App (Var (Op name)) [t1]) [t2])
175175 levels
176176
177−
178177toAssoc :: Associativity -> Assoc
179178toAssoc Infixl = AssocLeft
180179toAssoc Infixr = AssocRight