git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix cabal file and add test/example
764b925Gary Burgess
examples/passing/ObjectWildcards.pursnew file+14
@@ -0,0 +1,14 @@
1+module Main where
2+
3+import Control.Monad.Eff
4+import Debug.Trace
5+
6+mkRecord = { foo: _, bar: _, baz: "baz" }
7+
8+getValue :: forall e. Eff (| e) Boolean
9+getValue = return true
10+
11+main = do
12+ obj <- { value: _ } <$> getValue
13+ print obj.value
14+ trace (mkRecord 1 "Done!").bar
purescript.cabal+1
@@ -93,6 +93,7 @@ library
93 Language.PureScript.Sugar.CaseDeclarations
93 Language.PureScript.Sugar.CaseDeclarations
94 Language.PureScript.Sugar.DoNotation
94 Language.PureScript.Sugar.DoNotation
95 Language.PureScript.Sugar.Names
95 Language.PureScript.Sugar.Names
96+ Language.PureScript.Sugar.ObjectWildcards
96 Language.PureScript.Sugar.Operators
97 Language.PureScript.Sugar.Operators
97 Language.PureScript.Sugar.TypeClasses
98 Language.PureScript.Sugar.TypeClasses
98 Language.PureScript.Sugar.TypeDeclarations
99 Language.PureScript.Sugar.TypeDeclarations
src/Language/PureScript/Sugar/ObjectWildcards.hs+16−17
@@ -26,20 +26,19 @@ import Language.PureScript.Names
26
26
27desugarObjectConstructors :: Module -> Module
27desugarObjectConstructors :: Module -> Module
28desugarObjectConstructors (Module mn ds exts) = Module mn (map desugarDecl ds) exts
28desugarObjectConstructors (Module mn ds exts) = Module mn (map desugarDecl ds) exts
29−
29+ where
30+
30−desugarDecl :: Declaration -> Declaration
31+ desugarDecl :: Declaration -> Declaration
31−desugarDecl d =
32− let (f, _, _) = everywhereOnValues id desugarExpr id
32+ (desugarDecl, _, _) = everywhereOnValues id desugarExpr id
33− in f d
33+
34−
35−desugarExpr :: Expr -> Expr
34+ desugarExpr :: Expr -> Expr
36−desugarExpr (ObjectConstructor ps) =
35+ desugarExpr (ObjectConstructor ps) =
37− let (props, args) = partition (isJust . snd) ps
36+ let (props, args) = partition (isJust . snd) ps
38− in if null args
37+ in if null args
39− then ObjectLiteral $ second fromJust `map` props
38+ then ObjectLiteral $ second fromJust `map` props
40− else foldr (Abs . Left . Ident . fst) (ObjectLiteral (mkProp `map` ps)) (reverse args)
39+ else foldr (Abs . Left . Ident . fst) (ObjectLiteral (mkProp `map` ps)) args
41−desugarExpr e = e
40+ desugarExpr e = e
42−
41+
43−mkProp :: (String, Maybe Expr) -> (String, Expr)
42+ mkProp :: (String, Maybe Expr) -> (String, Expr)
44−mkProp (name, Just e) = (name, e)
43+ mkProp (name, Just e) = (name, e)
45−mkProp (name, Nothing) = (name, Var (Qualified Nothing (Ident name)))
44+ mkProp (name, Nothing) = (name, Var (Qualified Nothing (Ident name)))