shithub: MicroHs

Download patch

ref: f3d7e4127dbfc7876ad34dba86920d3601733358
parent: e54c08b89348801b7d7e1101e456899fb785ffdb
author: Lennart Augustsson <lennart@augustsson.net>
date: Sun Dec 29 06:47:10 EST 2024

Refactor

--- a/src/MicroHs/Deriving.hs
+++ b/src/MicroHs/Deriving.hs
@@ -141,7 +141,7 @@
     hdr = EApp etyp (EVar $ qualIdent mn i)
     mdl = ELit loc $ LStr $ unIdent mn
     nam = ELit loc $ LStr $ unIdent i
-    eqns = eEqns [eDummy] $ eApp2 (EVar imkTyConApp) (eApp2 (EVar imkTyCon) mdl nam) (EListish (LList []))
+    eqns = eEqns [eDummy] $ eAppI2 imkTyConApp (eAppI2 imkTyCon mdl nam) (EListish (LList []))
     inst = Instance hdr [BFcn itypeRep eqns]
   return [inst]
 
--- a/src/MicroHs/Expr.hs
+++ b/src/MicroHs/Expr.hs
@@ -30,7 +30,7 @@
   Con(..), conIdent, conArity, conFields,
   tupleConstr, getTupleConstr,
   mkTupleSel,
-  eApp2, eApp3, eApps,
+  eApp2, eAppI2, eApp3, eApps,
   lhsToType,
   subst,
   allVarsExpr, allVarsBind, allVarsEqns, allVarsPat,
@@ -333,6 +333,9 @@
 
 eApp2 :: Expr -> Expr -> Expr -> Expr
 eApp2 a b c = EApp (EApp a b) c
+
+eAppI2 :: Ident -> Expr -> Expr -> Expr
+eAppI2 a b c = EApp (EApp (EVar a) b) c
 
 eApp3 :: Expr -> Expr -> Expr -> Expr -> Expr
 eApp3 a b c d = EApp (eApp2 a b c) d
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -407,7 +407,7 @@
   where
     pCtx =     ((:[]) <$> pTypeApp)
            <|> (eq <$> pTypeArg <*> pTilde <*> pTypeArg)   -- A hack to allow   a~b => ...
-    eq t1 i t2 = [eApp2 (EVar i) t1 t2]
+    eq t1 i t2 = [eAppI2 i t1 t2]
     pTilde = do i <- pQSymOper; guard (i == mkIdent "~"); return i
 
 pDRArrow :: P ()
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -3117,7 +3117,7 @@
   addConstraint d (mkEqType loc t1 t2)
 
 mkEqType :: SLoc -> EType -> EType -> EConstraint
-mkEqType loc t1 t2 = EApp (EApp (EVar (mkIdentSLoc loc nameTypeEq)) t1) t2
+mkEqType loc t1 t2 = eAppI2 (mkIdentSLoc loc nameTypeEq) t1 t2
 
 -- Possibly solve a type equality.
 solveEq :: TypeEqTable -> EType -> EType -> Maybe (Expr, [(EType, EType)])