@@ -273,11 +273,12 @@ qualifiedToJS _ f (Qualified _ a) = JSVar $ identToJs (f a)
273bindersToJs :: (Functor m, Applicative m, Monad m) => Options -> ModuleName -> Environment -> [CaseAlternative] -> [JS] -> SupplyT m JS
273bindersToJs :: (Functor m, Applicative m, Monad m) => Options -> ModuleName -> Environment -> [CaseAlternative] -> [JS] -> SupplyT m JS
274bindersToJs opts m e binders vals = do
274bindersToJs opts m e binders vals = do
275 valNames <- replicateM (length vals) freshName
275 valNames <- replicateM (length vals) freshName
276+ let assignments = zipWith JSVariableIntroduction valNames (map Just vals)
276 jss <- forM binders $ \(CaseAlternative bs grd result) -> do
277 jss <- forM binders $ \(CaseAlternative bs grd result) -> do
277 ret <- valueToJs opts m (bindNames m (concatMap binderNames bs) e) result
278 ret <- valueToJs opts m (bindNames m (concatMap binderNames bs) e) result
278 go valNames [JSReturn ret] bs grd
279 go valNames [JSReturn ret] bs grd
279− return $ JSApp (JSFunction Nothing valNames (JSBlock (concat jss ++ [JSThrow (JSStringLiteral "Failed pattern match")])))
280+ return $ JSApp (JSFunction Nothing [] (JSBlock (assignments ++ concat jss ++ [JSThrow (JSStringLiteral "Failed pattern match")])))
282 go :: (Functor m, Applicative m, Monad m) => [String] -> [JS] -> [Binder] -> Maybe Guard -> SupplyT m [JS]
283 go :: (Functor m, Applicative m, Monad m) => [String] -> [JS] -> [Binder] -> Maybe Guard -> SupplyT m [JS]
283 go _ done [] Nothing = return done
284 go _ done [] Nothing = return done