git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Allow : and . in operator names
67df3cdPhil Freeman
examples/passing/Cons.pursnew file+7
@@ -0,0 +1,7 @@
1+infixr 6 :
2+
3+foreign import (:) :: forall a. a -> [a] -> [a]
4+
5+test1 = \xs -> 1 : xs
6+
7+test2 = 1 : 2 : 3 : []
examples/passing/Operators.purs+5
@@ -35,3 +35,8 @@ module Ops where
35test9 = Ops.foo Ops.@@ "Hello World"
35test9 = Ops.foo Ops.@@ "Hello World"
36
36
37test10 = "Hello" `Ops.bar` "World"
37test10 = "Hello" `Ops.bar` "World"
38+
39+(...) :: forall a. [a] -> [a] -> [a]
40+(...) = \as -> \bs -> as
41+
42+test11 = [1, 2, 3] ... [4, 5, 6]
purescript.cabal+1−1
@@ -1,5 +1,5 @@
1name: purescript
1name: purescript
2−version: 0.1.16
2+version: 0.1.17
3cabal-version: >=1.8
3cabal-version: >=1.8
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
src/Language/PureScript/Parser/Common.hs+3−3
@@ -74,7 +74,7 @@ reservedNames = [ "case"
74
74
75builtInOperators :: [String]
75builtInOperators :: [String]
76builtInOperators = [ "~", "-", "<=", ">=", "<", ">", "*", "/", "%", "++", "+", "<<", ">>>", ">>"
76builtInOperators = [ "~", "-", "<=", ">=", "<", ">", "*", "/", "%", "++", "+", "<<", ">>>", ">>"
77− , "==", "!=", "&&", "||", "&", "^", "|", "!!", "!" ]
77+ , "==", "!=", "&&", "||", "&", "^", "|", "!!", "!", "." ]
78
78
79reservedOpNames :: [String]
79reservedOpNames :: [String]
80reservedOpNames = builtInOperators ++ [ "->" ]
80reservedOpNames = builtInOperators ++ [ "->" ]
@@ -89,10 +89,10 @@ identLetter :: P.Parsec String u Char
89identLetter = P.alphaNum <|> P.oneOf "_'"
89identLetter = P.alphaNum <|> P.oneOf "_'"
90
90
91opStart :: P.Parsec String u Char
91opStart :: P.Parsec String u Char
92−opStart = P.oneOf "!#%&*+/<=>?@^|~"
92+opStart = P.oneOf ":.!#%&*+/<=>?@^|~"
93
93
94opLetter :: P.Parsec String u Char
94opLetter :: P.Parsec String u Char
95−opLetter = P.oneOf ":#$%&*+./<=>?@^|"
95+opLetter = P.oneOf ":.#$%&*+./<=>?@^|"
96
96
97langDef :: PT.GenLanguageDef String u Identity
97langDef :: PT.GenLanguageDef String u Identity
98langDef = PT.LanguageDef
98langDef = PT.LanguageDef
src/Language/PureScript/Parser/Values.hs+2−2
@@ -120,7 +120,7 @@ parsePropertyUpdate = do
120
120
121parseAccessor :: Value -> P.Parsec String ParseState Value
121parseAccessor :: Value -> P.Parsec String ParseState Value
122parseAccessor (Constructor _) = P.unexpected "constructor"
122parseAccessor (Constructor _) = P.unexpected "constructor"
123−parseAccessor obj = Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier) <*> pure obj
123+parseAccessor obj = P.try $ Accessor <$> (C.indented *> C.dot *> P.notFollowedBy C.opLetter *> C.indented *> C.identifier) <*> pure obj
124
124
125parseValue :: P.Parsec String ParseState Value
125parseValue :: P.Parsec String ParseState Value
126parseValue =
126parseValue =
@@ -161,7 +161,7 @@ parseAssignment = do
161
161
162parseWhile :: P.Parsec String ParseState Statement
162parseWhile :: P.Parsec String ParseState Statement
163parseWhile = While <$> (C.reserved "while" *> C.indented *> C.parens parseValue)
163parseWhile = While <$> (C.reserved "while" *> C.indented *> C.parens parseValue)
164− <*> (C.indented *> parseManyStatements)
164+ <*> (C.indented *> parseManyStatements)
165
165
166parseFor :: P.Parsec String ParseState Statement
166parseFor :: P.Parsec String ParseState Statement
167parseFor = For <$> (C.reserved "for" *> C.indented *> C.lexeme (P.char '(') *> C.indented *> C.parseIdent)
167parseFor = For <$> (C.reserved "for" *> C.indented *> C.lexeme (P.char '(') *> C.indented *> C.parseIdent)