@@ -117,18 +117,17 @@ expression (L span expr) =
117117 Binop op e1 e2 -> binop span op e1 e2
118118
119119 Lambda p e@(L s _) ->
120− do body' <- expression body
120+ do (args, body) <- foldM depattern ([], innerBody) (reverse patterns)
121+ body' <- expression body
121122 return $ case length args < 2 || length args > 9 of
122123 True -> foldr (==>) body' (map (:[]) args)
123124 False -> ref ("F" ++ show (length args)) <| (args ==> body')
124125 where
125− (args, body) = foldr depattern ([], innerBody) (zip patterns [0..])
126−
127− depattern (pattern,n) (args, body) =
126+ depattern (args, body) pattern =
128127 case pattern of
129− PVar x -> (args ++ [x], body)
130− _ -> let arg = "arg" ++ show n
131− in (args ++ [arg], L s (Case (L s (Var arg)) [(pattern, body)]))
128+ PVar x -> return (args ++ [x], body)
129+ _ -> do arg <- Case.newVar
130+ return (args ++ [arg], L s (Case (L s (Var arg)) [(pattern, body)]))
132131
133132 (patterns, innerBody) = collect [p] e
134133