record 0.1.3 → 0.1.4
raw patch · 3 files changed
+42/−13 lines, 3 files
Files
- CHANGELOG.md +3/−0
- library/Record/Parser.hs +38/−12
- record.cabal +1/−1
CHANGELOG.md view
@@ -1,3 +1,6 @@+# 0.1.4+* Fix tuples parsing+ # 0.1.3 * Parsing of unit values and types
library/Record/Parser.hs view
@@ -53,6 +53,15 @@ skipSpace *> p <* skipSpace <* endOfInput -- |+-- >>> run type' "(Int, Char)"+-- Right (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Char"))+-- +-- >>> run type' "(,) Int Int"+-- Right (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Int"))+-- +-- >>> run type' "(,)"+-- Right (Type_Tuple 2)+-- -- >>> run type' "()" -- Right (Type_Tuple 0) type' :: Parser Type@@ -72,13 +81,17 @@ conType = fmap Type_Con $ upperCaseName tupleConType =- fmap Type_Tuple $ - char '(' *> (length <$> many (skipSpace *> char ',')) <* skipSpace <* char ')'+ Type_Tuple 0 <$ string "()" <|>+ Type_Tuple . succ . length <$> (char '(' *> many (char ',') <* char ')') tupleType =- fmap (\l -> foldl Type_App (Type_Tuple (length l)) l) $- char '(' *> skipSpace *>- sepBy1 type' (skipSpace *> char ',' <* skipSpace)- <* skipSpace <* char ')'+ do+ char '('+ skipSpace+ h <- type' <* skipSpace <* char ',' <* skipSpace+ t <- sepBy1 type' (skipSpace *> char ',' <* skipSpace)+ skipSpace+ char ')'+ return $ foldl Type_App (Type_Tuple (1 + length t)) $ h : t listType = fmap (Type_App Type_List) $ char '[' *> skipSpace *> type' <* skipSpace <* char ']'@@ -178,6 +191,15 @@ -- | -- +-- >>> run exp "(,)"+-- Right (Exp_TupleCon 2)+-- +-- >>> run exp "(1,2)"+-- Right (Exp_App (Exp_App (Exp_TupleCon 2) (Exp_Lit (Lit_Integer 1))) (Exp_Lit (Lit_Integer 2)))+-- +-- >>> run exp "(1)"+-- Right (Exp_Lit (Lit_Integer 1))+-- -- >>> run exp "()" -- Right (Exp_TupleCon 0) exp :: Parser Exp@@ -217,15 +239,19 @@ con = Exp_Con <$> (upperCaseName <|> symbolicIdent) tupleCon =- Exp_TupleCon . length <$> - (char '(' *> many (char ',') <* char ')')+ Exp_TupleCon 0 <$ string "()" <|>+ Exp_TupleCon . succ . length <$> (char '(' *> many (char ',') <* char ')') nil = Exp_Nil <$ string "[]" tuple =- fmap (\l -> foldl Exp_App (Exp_TupleCon (length l)) l) $- char '(' *> skipSpace *>- sepBy1 exp (skipSpace *> char ',' <* skipSpace)- <* skipSpace <* char ')'+ do+ char '('+ skipSpace+ h <- exp <* skipSpace <* char ',' <* skipSpace+ t <- sepBy1 exp (skipSpace *> char ',' <* skipSpace)+ skipSpace+ char ')'+ return $ foldl Exp_App (Exp_TupleCon (1 + length t)) $ h : t list = fmap Exp_List $ char '[' *> skipSpace *>
record.cabal view
@@ -1,7 +1,7 @@ name: record version:- 0.1.3+ 0.1.4 synopsis: First class records implemented with quasi-quotation description: