@@ -40,7 +40,7 @@ parseFunction :: P.Parsec String ParseState Type
40parseFunction = parens $ P.try (lexeme (P.string "->")) >> return tyFunction
40parseFunction = parens $ P.try (lexeme (P.string "->")) >> return tyFunction
42parseObject :: P.Parsec String ParseState Type
42parseObject :: P.Parsec String ParseState Type
43−parseObject = braces $ TypeApp tyObject <$> parseRow False
43+parseObject = braces $ TypeApp tyObject <$> parseRow
45parseTypeVariable :: P.Parsec String ParseState Type
45parseTypeVariable :: P.Parsec String ParseState Type
46parseTypeVariable = do
46parseTypeVariable = do
@@ -67,7 +67,7 @@ parseTypeAtom = indented *> P.choice (map P.try
67 , parseTypeVariable
67 , parseTypeVariable
68 , parseTypeConstructor
68 , parseTypeConstructor
69 , parseForAll
69 , parseForAll
70− , parens (parseRow True)
70+ , parens parseRow
71 , parens parsePolyType ])
71 , parens parsePolyType ])
73parseConstrainedType :: P.Parsec String ParseState Type
73parseConstrainedType :: P.Parsec String ParseState Type
@@ -111,6 +111,5 @@ parseNameAndType p = (,) <$> (indented *> (identifier <|> stringLiteral) <* inde
111parseRowEnding :: P.Parsec String ParseState Type
111parseRowEnding :: P.Parsec String ParseState Type
112parseRowEnding = P.option REmpty (TypeVar <$> (lexeme (indented *> P.char '|') *> indented *> identifier))
112parseRowEnding = P.option REmpty (TypeVar <$> (lexeme (indented *> P.char '|') *> indented *> identifier))
114−parseRow :: Bool -> P.Parsec String ParseState Type
114+parseRow :: P.Parsec String ParseState Type
115−parseRow nonEmpty = (curry rowFromList <$> many' (parseNameAndType parsePolyType) <*> parseRowEnding) P.<?> "row"
115+parseRow = (curry rowFromList <$> commaSep (parseNameAndType parsePolyType) <*> parseRowEnding) P.<?> "row"
116− where many' = if nonEmpty then commaSep1 else commaSep