Skip to content

Commit ebefb58

Browse files
committed
Support optional instance names
1 parent a5fb821 commit ebefb58

File tree

3 files changed

+10
-12
lines changed

3 files changed

+10
-12
lines changed

src/PureScript/CST/Parser.purs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -298,17 +298,19 @@ parseInstanceChainSeparator =
298298
parseInstance :: Parser (Recovered Instance)
299299
parseInstance = do
300300
keyword <- tokKeyword "instance"
301-
name <- parseIdent
302-
separator <- tokDoubleColon
301+
name <- optional parseInstanceName
303302
constraints <- optional $ try $ Tuple <$> parseClassConstraints parseType3 <*> tokRightFatArrow
304303
className <- parseQualifiedProper
305304
types <- many parseTypeAtom
306305
body <- optional $ Tuple <$> tokKeyword "where" <*> layoutNonEmpty parseInstanceBinding
307306
pure $ Instance
308-
{ head: { keyword, name, separator, constraints, className, types }
307+
{ head: { keyword, name, constraints, className, types }
309308
, body
310309
}
311310

311+
parseInstanceName :: Parser (Tuple (Name Ident) SourceToken)
312+
parseInstanceName = Tuple <$> parseIdent <*> tokDoubleColon
313+
312314
parseInstanceBinding :: Parser (Recovered InstanceBinding)
313315
parseInstanceBinding = do
314316
ident <- parseIdent
@@ -332,12 +334,11 @@ parseDeclDerive = do
332334
derive_ <- tokKeyword "derive"
333335
newtype_ <- optional $ tokKeyword "newtype"
334336
keyword <- tokKeyword "instance"
335-
name <- parseIdent
336-
separator <- tokDoubleColon
337+
name <- optional parseInstanceName
337338
constraints <- optional $ try $ Tuple <$> parseClassConstraints parseType3 <*> tokRightFatArrow
338339
className <- parseQualifiedProper
339340
types <- many parseTypeAtom
340-
pure $ DeclDerive derive_ newtype_ { keyword, name, separator, constraints, className, types }
341+
pure $ DeclDerive derive_ newtype_ { keyword, name, constraints, className, types }
341342

342343
parseDeclValue :: Parser (Recovered Declaration)
343344
parseDeclValue = do

src/PureScript/CST/Range.purs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -513,8 +513,7 @@ instance tokensOfDecl :: TokensOf e => TokensOf (Declaration e) where
513513
cons keyword $ defer \_ ->
514514
foldMap singleton tok
515515
<> singleton inst.keyword
516-
<> tokensOf inst.name
517-
<> singleton inst.separator
516+
<> foldMap (\(Tuple cs t) -> tokensOf cs <> singleton t) inst.name
518517
<> foldMap (\(Tuple cs t) -> tokensOf cs <> singleton t) inst.constraints
519518
<> tokensOf inst.className
520519
<> tokensOf inst.types
@@ -577,8 +576,7 @@ instance rangeOfInstance :: RangeOf e => RangeOf (Instance e) where
577576
instance tokensOfInstance :: TokensOf e => TokensOf (Instance e) where
578577
tokensOf (Instance { head, body }) =
579578
cons head.keyword $ defer \_ ->
580-
tokensOf head.name
581-
<> singleton head.separator
579+
foldMap (\(Tuple cs t) -> tokensOf cs <> singleton t) head.name
582580
<> foldMap (\(Tuple cs t) -> tokensOf cs <> singleton t) head.constraints
583581
<> tokensOf head.className
584582
<> tokensOf head.types

src/PureScript/CST/Types.purs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,7 @@ data ClassFundep
294294

295295
type InstanceHead e =
296296
{ keyword :: SourceToken
297-
, name :: Name Ident
298-
, separator :: SourceToken
297+
, name :: Maybe (Tuple (Name Ident) SourceToken)
299298
, constraints :: Maybe (Tuple (OneOrDelimited (Type e)) SourceToken)
300299
, className :: QualifiedName Proper
301300
, types :: Array (Type e)

0 commit comments

Comments
 (0)