[project @ 2000-08-02 14:13:26 by rrt]
[ghc-hetmet.git] / ghc / lib / std / PrelBase.lhs
index e9160ea..235c41b 100644 (file)
@@ -1,5 +1,7 @@
+% -----------------------------------------------------------------------------
+% $Id: PrelBase.lhs,v 1.34 2000/08/02 14:13:27 rrt Exp $
 %
-% (c) The GRAP/AQUA Project, Glasgow University, 1992-1996
+% (c) The University of Glasgow, 1992-2000
 %
 \section[PrelBase]{Module @PrelBase@}
 
@@ -71,18 +73,20 @@ Other Prelude modules are much easier with fewer complex dependencies.
 
 
 \begin{code}
-{-# OPTIONS -fcompiling-prelude -fno-implicit-prelude #-}
+{-# OPTIONS -fno-implicit-prelude #-}
 
 module PrelBase
        (
        module PrelBase,
-       module PrelGHC          -- Re-export PrelGHC, to avoid lots of people 
-                               -- having to import it explicitly
+       module PrelGHC,         -- Re-export PrelGHC, PrelErr & PrelNum, to avoid lots
+       module PrelErr,         -- of people having to import it explicitly
+       module PrelNum
   ) 
        where
 
-import {-# SOURCE #-} PrelErr ( error )
 import PrelGHC
+import {-# SOURCE #-} PrelErr
+import {-# SOURCE #-} PrelNum
 
 infixr 9  .
 infixr 5  ++, :
@@ -570,11 +574,21 @@ plusInt   (I# x) (I# y) = I# (x +# y)
 minusInt(I# x) (I# y) = I# (x -# y)
 timesInt(I# x) (I# y) = I# (x *# y)
 quotInt        (I# x) (I# y) = I# (quotInt# x y)
-remInt (I# x) (I# y) = I# (remInt# x y)
-gcdInt (I# a)  (I# b) = I# (gcdInt# a b)
+remInt (I# x) (I# y) = I# (remInt#  x y)
+
+gcdInt (I# a) (I# b) = g a b
+   where g 0# 0# = error "PrelBase.gcdInt: gcd 0 0 is undefined"
+         g 0# _  = I# absB
+         g _  0# = I# absA
+         g _  _  = I# (gcdInt# absA absB)
+
+         absInt x = if x <# 0# then negateInt# x else x
+
+         absA     = absInt a
+         absB     = absInt b
 
 negateInt :: Int -> Int
-negateInt (I# x)      = I# (negateInt# x)
+negateInt (I# x) = I# (negateInt# x)
 
 divInt, modInt :: Int -> Int -> Int
 x `divInt` y