@@ -317,11 +317,12 @@ qualifiedToJS _ f (Qualified _ a) = JSVar $ identToJs (f a)
317bindersToJs :: (Functor m, Applicative m, Monad m) => Options -> ModuleName -> Environment -> [CaseAlternative] -> [JS] -> SupplyT m JS
317bindersToJs :: (Functor m, Applicative m, Monad m) => Options -> ModuleName -> Environment -> [CaseAlternative] -> [JS] -> SupplyT m JS
318bindersToJs opts m e binders vals = do
318bindersToJs opts m e binders vals = do
319 valNames <- replicateM (length vals) freshName
319 valNames <- replicateM (length vals) freshName
320+ let assignments = zipWith JSVariableIntroduction valNames (map Just vals)
320 jss <- forM binders $ \(CaseAlternative bs grd result) -> do
321 jss <- forM binders $ \(CaseAlternative bs grd result) -> do
321 ret <- valueToJs opts m e result
322 ret <- valueToJs opts m e result
322 go valNames [JSReturn ret] bs grd
323 go valNames [JSReturn ret] bs grd
323− return $ JSApp (JSFunction Nothing valNames (JSBlock (concat jss ++ [JSThrow $ JSUnary JSNew $ JSApp (JSVar "Error") $ [(JSStringLiteral "Failed pattern match")]])))
324+ return $ JSApp (JSFunction Nothing [] (JSBlock (assignments ++ concat jss ++ [JSThrow $ JSUnary JSNew $ JSApp (JSVar "Error") $ [JSStringLiteral "Failed pattern match"]])))
326 go :: (Functor m, Applicative m, Monad m) => [String] -> [JS] -> [Binder] -> Maybe Guard -> SupplyT m [JS]
327 go :: (Functor m, Applicative m, Monad m) => [String] -> [JS] -> [Binder] -> Maybe Guard -> SupplyT m [JS]
327 go _ done [] Nothing = return done
328 go _ done [] Nothing = return done