git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix #256
commit50bfb222527b861a3f23988ba5e05cbceb76fd7a authorPhil Freeman <paf31@cantab.net> dateFri 7 Mar 2014, 18:00 (13 years ago) parent3286eaf
6 files changed+17−7
examples/passing/Let.purs+8 psci/Parser.hs+1−1 src/Language/PureScript/Parser/Values.hs+2−1 src/Language/PureScript/Sugar.hs+2−2 src/Language/PureScript/Sugar/Let.hs+3−2 src/Language/PureScript/Values.hs+1−1
examples/passing/Let.purs+8
@@ -12,7 +12,15 @@ test2 x y =
1212
1313test3 x = let 1 = x in 2
1414
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+
1521main = do
1622 Debug.Trace.print (test1 1)
1723 Debug.Trace.print (test2 1 2)
1824 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
3434-- we actually want the normal @let@.
3535--
3636psciLet :: 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))
3838 <*> (P.indented *> P.reservedOp "=" *> P.parseValue))
3939
4040-- |
src/Language/PureScript/Parser/Values.hs+2−1
@@ -89,7 +89,8 @@ parseLet :: P.Parsec String ParseState Value
8989parseLet = do
9090 C.reserved "let"
9191 C.indented
92− binder <- parseBinder
92+ binder <- P.try (Right <$> ((,) <$> C.parseIdent <*> P.many (Left <$> P.try C.parseIdent <|> Right <$> parseBinderNoParens)))
93+ <|> (Left <$> parseBinder)
9394 C.indented
9495 C.reservedOp "="
9596 C.indented
src/Language/PureScript/Sugar.hs+2−2
@@ -51,9 +51,9 @@ import Language.PureScript.Sugar.Names as S
5151desugar :: [Module] -> Either String [Module]
5252desugar = rebracket
5353 >=> desugarDo
54− >=> desugarCasesModule
5554 >=> desugarLetBindings
56− >>> desugarImports
55+ >>> desugarCasesModule
56+ >=> desugarImports
5757 >=> desugarTypeDeclarationsModule
5858 >=> desugarTypeClasses
5959 >=> createBindingGroupsModule
src/Language/PureScript/Sugar/Let.hs+3−2
@@ -28,6 +28,7 @@ import Language.PureScript.Declarations
2828desugarLetBindings :: [Module] -> [Module]
2929desugarLetBindings = everywhere (mkT go)
3030 where
31− go (Let (VarBinder ident) value result) = App (Abs (Left ident) result) value
32− go (Let binder value result) = Case [value] [CaseAlternative [binder] Nothing result]
31+ go (Let (Left (VarBinder ident)) value result) = App (Abs (Left ident) result) value
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)
3334 go other = other
src/Language/PureScript/Values.hs+1−1
@@ -102,7 +102,7 @@ data Value
102102 -- |
103103 -- A let binding
104104 --
105− | Let Binder Value Value
105+ | Let (Either Binder (Ident, [Either Ident Binder])) Value Value
106106 -- |
107107 -- A do-notation block
108108 --