shithub: MicroHs

Download patch

ref: 71fe581917d7014d72c6d9966a134e04f7d1b5aa
parent: ddc38da1edf82344f6a211e0a00e075549861ba8
parent: f9f47c644421659ae388a6b831ac706439529919
author: Lennart Augustsson <lennart@augustsson.net>
date: Fri Jan 19 05:20:59 EST 2024

Merge pull request #25 from jmaessen/lazier-utils

Tweak Desugar.lazier to use existing utility functions

--- a/src/MicroHs/Desugar.hs
+++ b/src/MicroHs/Desugar.hs
@@ -541,8 +541,7 @@
       (drops, keeps) = splitAt arity as
       -- reverse n-ary apply
       app :: [Ident] -> Exp -> Exp
-      app [] e = e
-      app (v:vs) e = app vs $ App e (Var v)
+      app vs e = apps e (map Var vs)
       -- Replace n recursive args with call to vfcn'
       repl :: [Ident] -> Exp -> Exp
       repl vs (Lam i e) = app vs $ Lam i $ repl [] e
@@ -552,11 +551,7 @@
       repl vs (Var v)
         | v == fcn && take arity vs == drops = app (drop arity vs) $ vfcn'
       repl vs e = app vs e
-      -- n-ary lambda
-      lam :: [Ident] -> Exp -> Exp
-      lam [] e = e
-      lam (v:vs) e = Lam v $ lam vs e
   in  if arity > 0
-      then (fcn, lam drops $ letRecE fcn' (lam keeps (repl [] body)) vfcn')
+      then (fcn, lams drops $ letRecE fcn' (lams keeps (repl [] body)) vfcn')
       else def
 lazier def = def
--