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