on master help sign in
Enable record pattern matching in let-expressions, and fix a toJS error in which records added a newline that could cause them to be parsed weirdly by JS.
eeeaad8evancz
elm/src/Gen/CompileToJS.hs+1−1
@@ -198,7 +198,7 @@ access x e = jsFunc "r" (ret body) ++ parens e
198makeRecord kvs = do
198makeRecord kvs = do
199 kvs' <- (Map.toList . foldl' combine Map.empty) `liftM` mapM prep kvs
199 kvs' <- (Map.toList . foldl' combine Map.empty) `liftM` mapM prep kvs
200 let fs = map (\(k,vs) -> k ++ " : " ++ jsList vs) kvs' ++ ["_ : [true]"]
200 let fs = map (\(k,vs) -> k ++ " : " ++ jsList vs) kvs' ++ ["_ : [true]"]
201− return $ "\n " ++ braces (intercalate ",\n " fs)
201+ return $ braces ("\n " ++ intercalate ",\n " fs)
202 where combine r (k,v) = Map.insertWith (++) k v r
202 where combine r (k,v) = Map.insertWith (++) k v r
203 prep (k, as, e@(C t s _)) =
203 prep (k, as, e@(C t s _)) =
204 do v <- toJS' (foldr (\x e -> C t s $ Lambda x e) e as)
204 do v <- toJS' (foldr (\x e -> C t s $ Lambda x e) e as)
elm/src/Parse/Patterns.hs+5
@@ -96,4 +96,9 @@ matchSingle pat exp@(C t s _) p =
96 PVar x ->
96 PVar x ->
97 return [ FnDef x [] (ctx $ Case exp [(pat, ctx $ Var x)]) ]
97 return [ FnDef x [] (ctx $ Case exp [(pat, ctx $ Var x)]) ]
98
98
99+ PRecord fs -> do
100+ a <- (\x -> 'a' : show x) `liftM` guid
101+ let toDef f = FnDef f [] (ctx $ Access (ctx $ Var a) f)
102+ return (FnDef a [] exp : map toDef fs)
103+
99 PAnything -> return []
104 PAnything -> return []
elm/src/Types/Unify.hs+1−7
@@ -8,18 +8,12 @@ import Guid
8import Types.Constrain
8import Types.Constrain
9import Types.Solver
9import Types.Solver
10
10
11−import System.IO.Unsafe
12−
13−prints xs v =
14− unsafePerformIO (putStrLn "~~~~~~~~~~" >> mapM print xs) `seq` v
15−
16unify hints modul = run $ do
11unify hints modul = run $ do
17 constraints <- constrain hints modul
12 constraints <- constrain hints modul
18 case constraints of
13 case constraints of
19 Left msg -> return (Left msg)
14 Left msg -> return (Left msg)
20 Right (escapees, cs) ->
15 Right (escapees, cs) ->
21− prints cs $
22 do subs <- solver cs Map.empty
16 do subs <- solver cs Map.empty
23 return $ do ss <- subs
17 return $ do ss <- subs
24− prints (Map.toList ss) $ return (escapees, ss)
18+ return (escapees, ss)
25
19