@@ -75,7 +75,7 @@ parseConstructor :: P.Parsec String ParseState Value
75parseConstructor = Constructor <$> C.properName
75parseConstructor = Constructor <$> C.properName
77parseCase :: P.Parsec String ParseState Value
77parseCase :: 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
79 <*> (C.indented *> C.mark (P.many (C.same *> C.mark parseCaseAlternative)))
79 <*> (C.indented *> C.mark (P.many (C.same *> C.mark parseCaseAlternative)))
81parseCaseAlternative :: P.Parsec String ParseState (Binder, Value)
81parseCaseAlternative :: P.Parsec String ParseState (Binder, Value)
@@ -84,30 +84,30 @@ parseCaseAlternative = (,) <$> (parseGuardedBinder <* C.lexeme (P.string "->"))
84 P.<?> "case alternative"
84 P.<?> "case alternative"
86parseIfThenElse :: P.Parsec String ParseState Value
86parseIfThenElse :: 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)
88 <*> (C.indented *> C.reserved "then" *> C.indented *> parseValue)
88 <*> (C.indented *> C.reserved "then" *> C.indented *> parseValue)
89 <*> (C.indented *> C.reserved "else" *> C.indented *> parseValue)
89 <*> (C.indented *> C.reserved "else" *> C.indented *> parseValue)
91parseBlock :: P.Parsec String ParseState Value
91parseBlock :: P.Parsec String ParseState Value
92−parseBlock = Block <$> (C.reserved "do" *> parseManyStatements)
92+parseBlock = Block <$> (P.try (C.reserved "do") *> parseManyStatements)
94parseManyStatements :: P.Parsec String ParseState [Statement]
94parseManyStatements :: P.Parsec String ParseState [Statement]
95parseManyStatements = C.indented *> C.mark (P.many (C.same *> C.mark parseStatement)) P.<?> "block"
95parseManyStatements = C.indented *> C.mark (P.many (C.same *> C.mark parseStatement)) P.<?> "block"
97parseValueAtom :: P.Parsec String ParseState Value
97parseValueAtom :: P.Parsec String ParseState Value
98−parseValueAtom = C.indented *> P.choice (map P.try
98+parseValueAtom = C.indented *> P.choice
99− [ parseNumericLiteral
99+ [ P.try parseNumericLiteral
100− , parseStringLiteral
100+ , P.try parseStringLiteral
101− , parseBooleanLiteral
101+ , P.try parseBooleanLiteral
102 , parseArrayLiteral
102 , parseArrayLiteral
103 , parseObjectLiteral
103 , parseObjectLiteral
104 , parseAbs
104 , parseAbs
105− , parseVar
105+ , P.try parseVar
106− , parseConstructor
106+ , P.try parseConstructor
107 , parseBlock
107 , parseBlock
108 , parseCase
108 , parseCase
109 , parseIfThenElse
109 , parseIfThenElse
110− , C.parens parseValue ])
110+ , C.parens parseValue ]
112parsePropertyUpdate :: P.Parsec String ParseState (String, Value)
112parsePropertyUpdate :: P.Parsec String ParseState (String, Value)
113parsePropertyUpdate = do
113parsePropertyUpdate = do
@@ -125,10 +125,10 @@ parseValue = do
126 indexersAndAccessors = C.buildPostfixParser postfixTable1 parseValueAtom
126 indexersAndAccessors = C.buildPostfixParser postfixTable1 parseValueAtom
127 postfixTable1 = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
127 postfixTable1 = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
128− , Indexer <$> (C.indented *> C.squares parseValue)
128+ , P.try $ Indexer <$> (C.indented *> C.squares parseValue)
129− , flip ObjectUpdate <$> (C.indented *> C.braces ((C.indented *> parsePropertyUpdate) `P.sepBy1` (C.indented *> C.comma))) ]
129+ , P.try $ 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])
130+ postfixTable2 = [ P.try (C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2]))
131− , flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
131+ , P.try $ flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
132 , flip TypedValue <$> (P.try (C.lexeme (C.indented *> P.string "::")) *> parsePolyType) ]
132 , flip TypedValue <$> (P.try (C.lexeme (C.indented *> P.string "::")) *> parsePolyType) ]
133 operators user =
133 operators user =
134 [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
134 [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
@@ -174,7 +174,6 @@ customOperatorTable fixities =
174 return $ \t1 t2 -> App (App (Var (Op name)) [t1]) [t2])
174 return $ \t1 t2 -> App (App (Var (Op name)) [t1]) [t2])
178toAssoc :: Associativity -> Assoc
177toAssoc :: Associativity -> Assoc
179toAssoc Infixl = AssocLeft
178toAssoc Infixl = AssocLeft
180toAssoc Infixr = AssocRight
179toAssoc Infixr = AssocRight