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.
commiteeeaad84909e60d40b735752c4a9095fb693ce21 authorevancz <info@elm-lang.org> dateFri 28 Dec 2012, 05:24 (14 years ago) parentcbfbd0a
3 files changed+7−8
elm/src/Gen/CompileToJS.hs+1−1 elm/src/Parse/Patterns.hs+5 elm/src/Types/Unify.hs+1−7
elm/src/Gen/CompileToJS.hs+1−1
@@ -198,7 +198,7 @@ access x e = jsFunc "r" (ret body) ++ parens e
198198makeRecord kvs = do
199199 kvs' <- (Map.toList . foldl' combine Map.empty) `liftM` mapM prep kvs
200200 let fs = map (\(k,vs) -> k ++ " : " ++ jsList vs) kvs' ++ ["_ : [true]"]
201− return $ "\n " ++ braces (intercalate ",\n " fs)
201+ return $ braces ("\n " ++ intercalate ",\n " fs)
202202 where combine r (k,v) = Map.insertWith (++) k v r
203203 prep (k, as, e@(C t s _)) =
204204 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 =
9696 PVar x ->
9797 return [ FnDef x [] (ctx $ Case exp [(pat, ctx $ Var x)]) ]
9898
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+
99104 PAnything -> return []
elm/src/Types/Unify.hs+1−7
@@ -8,18 +8,12 @@ import Guid
88import Types.Constrain
99import Types.Solver
1010
11−import System.IO.Unsafe
12−
13−prints xs v =
14− unsafePerformIO (putStrLn "~~~~~~~~~~" >> mapM print xs) `seq` v
15−
1611unify hints modul = run $ do
1712 constraints <- constrain hints modul
1813 case constraints of
1914 Left msg -> return (Left msg)
2015 Right (escapees, cs) ->
21− prints cs $
2216 do subs <- solver cs Map.empty
2317 return $ do ss <- subs
24− prints (Map.toList ss) $ return (escapees, ss)
18+ return (escapees, ss)
2519