[project @ 1998-02-02 16:47:53 by simonm]
authorsimonm <unknown>
Mon, 2 Feb 1998 16:47:53 +0000 (16:47 +0000)
committersimonm <unknown>
Mon, 2 Feb 1998 16:47:53 +0000 (16:47 +0000)
Short-cut unary '-' applied to an integer constant, before literal
overloading kicks in.

ghc/compiler/typecheck/TcExpr.lhs

index 34bb8cc..38a124e 100644 (file)
@@ -185,7 +185,15 @@ tcExpr (HsLit lit@(HsString str)) res_ty
 tcExpr (HsPar expr) res_ty -- preserve parens so printing needn't guess where they go
   = tcExpr expr res_ty
 
-tcExpr (NegApp expr neg) res_ty = tcExpr (HsApp neg expr) res_ty
+-- perform the negate *before* overloading the integer, since the case
+-- of minBound on Ints fails otherwise.  Could be done elsewhere, but
+-- convenient to do it here.
+
+tcExpr (NegApp (HsLit (HsInt i)) neg) res_ty
+  = tcExpr (HsLit (HsInt (-i))) res_ty
+
+tcExpr (NegApp expr neg) res_ty 
+  = tcExpr (HsApp neg expr) res_ty
 
 tcExpr (HsLam match) res_ty
   = tcMatchExpected [] res_ty match    `thenTc` \ (match',lie) ->