git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix #256
50bfb22Phil Freeman
examples/passing/Let.purs+8
@@ -12,7 +12,15 @@ test2 x y =
12
12
13test3 x = let 1 = x in 2
13test3 x = let 1 = x in 2
14
14
15+test4 = let f x y z = x + y + z in
16+ f 1 2 3
17+
18+test5 = let f x [y, z] = x y z in
19+ f (+) [1, 2]
20+
15main = do
21main = do
16 Debug.Trace.print (test1 1)
22 Debug.Trace.print (test1 1)
17 Debug.Trace.print (test2 1 2)
23 Debug.Trace.print (test2 1 2)
18 Debug.Trace.print (test3 1)
24 Debug.Trace.print (test3 1)
25+ Debug.Trace.print test4
26+ Debug.Trace.print test5
psci/Parser.hs+1−1
@@ -34,7 +34,7 @@ import qualified Language.PureScript as P
34-- we actually want the normal @let@.
34-- we actually want the normal @let@.
35--
35--
36psciLet :: Parsec String P.ParseState Command
36psciLet :: Parsec String P.ParseState Command
37−psciLet = Let <$> (P.Let <$> (P.reserved "let" *> P.indented *> P.parseBinder)
37+psciLet = Let <$> (P.Let <$> (P.reserved "let" *> P.indented *> (Left <$> P.parseBinder))
38 <*> (P.indented *> P.reservedOp "=" *> P.parseValue))
38 <*> (P.indented *> P.reservedOp "=" *> P.parseValue))
39
39
40-- |
40-- |
src/Language/PureScript/Parser/Values.hs+2−1
@@ -89,7 +89,8 @@ parseLet :: P.Parsec String ParseState Value
89parseLet = do
89parseLet = do
90 C.reserved "let"
90 C.reserved "let"
91 C.indented
91 C.indented
92+ binder <- P.try (Right <$> ((,) <$> C.parseIdent <*> P.many (Left <$> P.try C.parseIdent <|> Right <$> parseBinderNoParens)))
92− binder <- parseBinder
93+ <|> (Left <$> parseBinder)
93 C.indented
94 C.indented
94 C.reservedOp "="
95 C.reservedOp "="
95 C.indented
96 C.indented
src/Language/PureScript/Sugar.hs+2−2
@@ -51,9 +51,9 @@ import Language.PureScript.Sugar.Names as S
51desugar :: [Module] -> Either String [Module]
51desugar :: [Module] -> Either String [Module]
52desugar = rebracket
52desugar = rebracket
53 >=> desugarDo
53 >=> desugarDo
54− >=> desugarCasesModule
55 >=> desugarLetBindings
54 >=> desugarLetBindings
55+ >>> desugarCasesModule
56− >>> desugarImports
56+ >=> desugarImports
57 >=> desugarTypeDeclarationsModule
57 >=> desugarTypeDeclarationsModule
58 >=> desugarTypeClasses
58 >=> desugarTypeClasses
59 >=> createBindingGroupsModule
59 >=> createBindingGroupsModule
src/Language/PureScript/Sugar/Let.hs+3−2
@@ -28,6 +28,7 @@ import Language.PureScript.Declarations
28desugarLetBindings :: [Module] -> [Module]
28desugarLetBindings :: [Module] -> [Module]
29desugarLetBindings = everywhere (mkT go)
29desugarLetBindings = everywhere (mkT go)
30 where
30 where
31− go (Let (VarBinder ident) value result) = App (Abs (Left ident) result) value
31+ go (Let (Left (VarBinder ident)) value result) = App (Abs (Left ident) result) value
32− go (Let binder value result) = Case [value] [CaseAlternative [binder] Nothing result]
32+ go (Let (Left binder) value result) = Case [value] [CaseAlternative [binder] Nothing result]
33+ go (Let (Right (ident, binders)) value result) = App (Abs (Left ident) result) (foldr Abs value binders)
33 go other = other
34 go other = other
src/Language/PureScript/Values.hs+1−1
@@ -102,7 +102,7 @@ data Value
102 -- |
102 -- |
103 -- A let binding
103 -- A let binding
104 --
104 --
105− | Let Binder Value Value
105+ | Let (Either Binder (Ident, [Either Ident Binder])) Value Value
106 -- |
106 -- |
107 -- A do-notation block
107 -- A do-notation block
108 --
108 --