@@ -20,6 +20,7 @@ module Language.PureScript.Parser.Declarations (
22import Data.Maybe (isJust, fromMaybe)
22import Data.Maybe (isJust, fromMaybe)
23+import Control.Monad (when)
23import Control.Applicative
24import Control.Applicative
24import qualified Text.Parsec as P
25import qualified Text.Parsec as P
@@ -45,7 +46,7 @@ parseDataDeclaration = do
46parseTypeDeclaration :: P.Parsec String ParseState Declaration
47parseTypeDeclaration :: P.Parsec String ParseState Declaration
47parseTypeDeclaration =
48parseTypeDeclaration =
48− TypeDeclaration <$> P.try (parseIdent <* lexeme (indented *> P.string "::"))
49+ TypeDeclaration <$> P.try (parseNonReservedIdent <* lexeme (indented *> P.string "::"))
49 <*> parsePolyType
50 <*> parsePolyType
51parseTypeSynonymDeclaration :: P.Parsec String ParseState Declaration
52parseTypeSynonymDeclaration :: P.Parsec String ParseState Declaration
@@ -56,7 +57,7 @@ parseTypeSynonymDeclaration =
57parseValueDeclaration :: P.Parsec String ParseState Declaration
58parseValueDeclaration :: P.Parsec String ParseState Declaration
58parseValueDeclaration =
59parseValueDeclaration =
59− ValueDeclaration <$> parseIdent
60+ ValueDeclaration <$> parseNonReservedIdent
60 <*> P.many parseTopLevelBinder
61 <*> P.many parseTopLevelBinder
61 <*> P.optionMaybe parseGuard
62 <*> P.optionMaybe parseGuard
62 <*> ((lexeme (indented *> P.char '=')) *> parseValue)
63 <*> ((lexeme (indented *> P.char '=')) *> parseValue)
@@ -68,7 +69,7 @@ parseExternDeclaration :: P.Parsec String ParseState Declaration
68parseExternDeclaration = P.try (reserved "foreign") *> indented *> (reserved "import") *> indented *>
69parseExternDeclaration = P.try (reserved "foreign") *> indented *> (reserved "import") *> indented *>
69 (ExternDataDeclaration <$> (P.try (reserved "data") *> indented *> properName)
70 (ExternDataDeclaration <$> (P.try (reserved "data") *> indented *> properName)
70 <*> (lexeme (indented *> P.string "::") *> parseKind)
71 <*> (lexeme (indented *> P.string "::") *> parseKind)
71− <|> do ident <- parseIdent
72+ <|> do ident <- parseNonReservedIdent
72 js <- P.optionMaybe (parseJSLiteral <$> stringLiteral)
73 js <- P.optionMaybe (parseJSLiteral <$> stringLiteral)
73 ty <- (lexeme (indented *> P.string "::") *> parsePolyType)
74 ty <- (lexeme (indented *> P.string "::") *> parsePolyType)
74 return $ ExternDeclaration (if isJust js then InlineJavascript else ForeignImport) ident js ty)
75 return $ ExternDeclaration (if isJust js then InlineJavascript else ForeignImport) ident js ty)