git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #2068 from purescript/2049
13fb81ePhil Freeman
examples/passing/2049.pursnew file+13
@@ -0,0 +1,13 @@
1+module Main where
2+
3+import Prelude
4+import Control.Monad.Eff.Console (log)
5+
6+data List a = Cons a (List a) | Nil
7+
8+infixr 6 Cons as :
9+
10+f :: List { x :: Int, y :: Int } -> Int
11+f ( r@{ x } : _) = x + r.y
12+
13+main = log "Done"
src/Language/PureScript/Parser/Declarations.hs+16−14
@@ -483,7 +483,7 @@ parseVarOrNamedBinder = do
483 -- TODO: once operator aliases are finalized in 0.9, this 'try' won't be needed
483 -- TODO: once operator aliases are finalized in 0.9, this 'try' won't be needed
484 -- any more since identifiers in binders won't be 'Op's.
484 -- any more since identifiers in binders won't be 'Op's.
485 name <- P.try C.parseIdent
485 name <- P.try C.parseIdent
486− let parseNamedBinder = NamedBinder name <$> (at *> C.indented *> parseBinder)
486+ let parseNamedBinder = NamedBinder name <$> (at *> C.indented *> parseBinderAtom)
487 parseNamedBinder <|> return (VarBinder name)
487 parseNamedBinder <|> return (VarBinder name)
488
488
489parseNullBinder :: TokenParser Binder
489parseNullBinder :: TokenParser Binder
@@ -515,26 +515,28 @@ parseBinder =
515 return (BinaryNoParensBinder op)) P.AssocRight
515 return (BinaryNoParensBinder op)) P.AssocRight
516 ]
516 ]
517 ]
517 ]
518+
518 -- TODO: parsePolyType when adding support for polymorphic types
519 -- TODO: parsePolyType when adding support for polymorphic types
519 postfixTable = [ \b -> flip TypedBinder b <$> (indented *> doubleColon *> parseType)
520 postfixTable = [ \b -> flip TypedBinder b <$> (indented *> doubleColon *> parseType)
520 ]
521 ]
521− parseBinderAtom :: TokenParser Binder
522− parseBinderAtom = P.choice
523− [ parseNullBinder
524− , LiteralBinder <$> parseCharLiteral
525− , LiteralBinder <$> parseStringLiteral
526− , LiteralBinder <$> parseBooleanLiteral
527− , parseNumberLiteral
528− , parseVarOrNamedBinder
529− , parseConstructorBinder
530− , parseObjectBinder
531− , parseArrayBinder
532− , ParensInBinder <$> parens parseBinder
533− ] P.<?> "binder"
534
522
535 parseOpBinder :: TokenParser Binder
523 parseOpBinder :: TokenParser Binder
536 parseOpBinder = OpBinder <$> parseQualified (Op <$> symbol)
524 parseOpBinder = OpBinder <$> parseQualified (Op <$> symbol)
537
525
526+parseBinderAtom :: TokenParser Binder
527+parseBinderAtom = P.choice
528+ [ parseNullBinder
529+ , LiteralBinder <$> parseCharLiteral
530+ , LiteralBinder <$> parseStringLiteral
531+ , LiteralBinder <$> parseBooleanLiteral
532+ , parseNumberLiteral
533+ , parseVarOrNamedBinder
534+ , parseConstructorBinder
535+ , parseObjectBinder
536+ , parseArrayBinder
537+ , ParensInBinder <$> parens parseBinder
538+ ] P.<?> "binder"
539+
538-- |
540-- |
539-- Parse a binder as it would appear in a top level declaration
541-- Parse a binder as it would appear in a top level declaration
540--
542--