@@ -274,8 +274,8 @@ binderToJs _ varName done (VarBinder _ ident) =
274 return (JSVariableIntroduction (identToJs ident) (Just (JSVar varName)) : done)
274 return (JSVariableIntroduction (identToJs ident) (Just (JSVar varName)) : done)
275binderToJs m varName done (ConstructorBinder (_, _, _, Just IsNewtype) _ _ [b]) =
275binderToJs m varName done (ConstructorBinder (_, _, _, Just IsNewtype) _ _ [b]) =
276 binderToJs m varName done b
276 binderToJs m varName done b
277−binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorType _)) _ ctor bs) = do
277+binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorType fields)) _ ctor bs) = do
278− js <- go 0 done bs
278+ js <- go (zip fields bs) done
279 return $ case ctorType of
279 return $ case ctorType of
280 ProductType -> js
280 ProductType -> js
281 SumType ->
281 SumType ->
@@ -283,13 +283,13 @@ binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorT
283 (JSBlock js)
283 (JSBlock js)
286− go :: (Functor m, Applicative m, Monad m) => Integer -> [JS] -> [Binder Ann] -> SupplyT m [JS]
286+ go :: (Functor m, Applicative m, Monad m) => [(Ident, Binder Ann)] -> [JS] -> SupplyT m [JS]
287− go _ done' [] = return done'
287+ go [] done' = return done'
288− go index done' (binder:bs') = do
288+ go ((field, binder) : remain) done' = do
289 argVar <- freshName
289 argVar <- freshName
290− done'' <- go (index + 1) done' bs'
290+ done'' <- go remain done'
291 js <- binderToJs m argVar done'' binder
291 js <- binderToJs m argVar done'' binder
292− return (JSVariableIntroduction argVar (Just (JSAccessor ("value" ++ show index) (JSVar varName))) : js)
292+ return (JSVariableIntroduction argVar (Just (JSAccessor (identToJs field) (JSVar varName))) : js)
293binderToJs m varName done binder@(ConstructorBinder _ _ ctor _) | isCons ctor = do
293binderToJs m varName done binder@(ConstructorBinder _ _ ctor _) | isCons ctor = do
294 let (headBinders, tailBinder) = uncons [] binder
294 let (headBinders, tailBinder) = uncons [] binder
295 numberOfHeadBinders = fromIntegral $ length headBinders
295 numberOfHeadBinders = fromIntegral $ length headBinders