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
--
⑨