shithub: MicroHs

Download patch

ref: 2e1a873733214b59f527208d8a34bb2bcfbabab2
parent: b79d312287d7e631dcd3588fc5aa1e24542c3fdd
author: Lennart Augustsson <lennart@augustsson.net>
date: Thu Nov 2 10:38:20 EDT 2023

More Eq

--- a/src/MicroHs/Expr.hs
+++ b/src/MicroHs/Expr.hs
@@ -31,7 +31,7 @@
   getSLocExpr, setSLocExpr,
   getSLocEqns,
   errorMessage,
-  Assoc(..), eqAssoc, Fixity,
+  Assoc(..), Fixity,
   getBindsVars,
   ) where
 import Prelude --Xhiding (Monad(..), Applicative(..), MonadFail(..), Functor(..), (<$>), (<>))
@@ -241,13 +241,13 @@
 ---------------------------------
 
 data Assoc = AssocLeft | AssocRight | AssocNone
-  --Xderiving (Eq, Show)
+  --Xderiving (Show)
 
-eqAssoc :: Assoc -> Assoc -> Bool
-eqAssoc AssocLeft AssocLeft = True
-eqAssoc AssocRight AssocRight = True
-eqAssoc AssocNone AssocNone = True
-eqAssoc _ _ = False
+instance Eq Assoc where
+  AssocLeft  == AssocLeft  = True
+  AssocRight == AssocRight = True
+  AssocNone  == AssocNone  = True
+  _          == _          = False
 
 type Fixity = (Assoc, Int)
 
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -1541,9 +1541,9 @@
     calc es ((o, _):os) [] = doOp es o os []
     calc es oos@((oy, (ay, py)):os) iies@((oo@(ox, (ax, px)), e) : ies) =
 --      traceM (show ((unIdent (getIdent (fst o)), ay, py), (unIdent i, ax, px)))
-      if px == py && (not (eqAssoc ax ay) || eqAssoc ax AssocNone) then
+      if px == py && (ax /= ay || ax == AssocNone) then
         errorMessage (getSLocExpr ox) "ambiguous operator expression"
-       else if px < py || eqAssoc ax AssocLeft && px == py then
+       else if px < py || ax == AssocLeft && px == py then
         doOp es oy os iies
        else
         calc (e:es) (oo : oos) ies
--