add ga_inl, ga_inr
[ghc-base.git] / include / CTypes.h
index 25b9ad8..3ca9f1c 100644 (file)
@@ -1,39 +1,42 @@
-/* -----------------------------------------------------------------------------
- * $Id: CTypes.h,v 1.5 2002/09/04 16:05:29 simonmar Exp $
- *
- * Dirty CPP hackery for CTypes/CTypesISO
- *
- * (c) The FFI task force, 2000
- * -------------------------------------------------------------------------- */
+{- --------------------------------------------------------------------------
+// Dirty CPP hackery for CTypes/CTypesISO
+//
+// (c) The FFI task force, 2000
+// --------------------------------------------------------------------------
+-}
 
-#include "MachDeps.h"
+#ifndef CTYPES__H
+#define CTYPES__H
 
-/* As long as there is no automatic derivation of classes for newtypes we resort
-   to extremely dirty cpp-hackery.   :-P   Some care has to be taken when the
-   macros below are modified, otherwise the layout rule will bite you. */
+#include "Typeable.h"
 
-/* A hacked version for GHC follows the Haskell 98 version... */
+{-
+// As long as there is no automatic derivation of classes for newtypes we resort
+// to extremely dirty cpp-hackery.   :-P   Some care has to be taken when the
+// macros below are modified, otherwise the layout rule will bite you.
+-}
+
+--  // A hacked version for GHC follows the Haskell 98 version...
 #ifndef __GLASGOW_HASKELL__
 
-#define NUMERIC_TYPE(T,C,S,B) \
+#define ARITHMETIC_TYPE(T,C,S,B) \
 newtype T = T B deriving (Eq, Ord) ; \
 INSTANCE_NUM(T) ; \
-INSTANCE_READ(T) ; \
-INSTANCE_SHOW(T) ; \
+INSTANCE_REAL(T) ; \
+INSTANCE_READ(T,B) ; \
+INSTANCE_SHOW(T,B) ; \
 INSTANCE_ENUM(T) ; \
-INSTANCE_STORABLE(T) : \
+INSTANCE_STORABLE(T) ; \
 INSTANCE_TYPEABLE0(T,C,S) ;
 
 #define INTEGRAL_TYPE(T,C,S,B) \
-NUMERIC_TYPE(T,C,S,B) ; \
+ARITHMETIC_TYPE(T,C,S,B) ; \
 INSTANCE_BOUNDED(T) ; \
-INSTANCE_REAL(T) ; \
 INSTANCE_INTEGRAL(T) ; \
 INSTANCE_BITS(T)
 
 #define FLOATING_TYPE(T,C,S,B) \
-NUMERIC_TYPE(T,C,S,B) ; \
-INSTANCE_REAL(T) ; \
+ARITHMETIC_TYPE(T,C,S,B) ; \
 INSTANCE_FRACTIONAL(T) ; \
 INSTANCE_FLOATING(T) ; \
 INSTANCE_REALFRAC(T) ; \
@@ -43,11 +46,11 @@ INSTANCE_REALFLOAT(T)
 #define fakeMap map
 #endif
 
-#define INSTANCE_READ(T) \
+#define INSTANCE_READ(T,B) \
 instance Read T where { \
    readsPrec p s = fakeMap (\(x, t) -> (T x, t)) (readsPrec p s) }
 
-#define INSTANCE_SHOW(T) \
+#define INSTANCE_SHOW(T,B) \
 instance Show T where { \
    showsPrec p (T x) = showsPrec p x }
 
@@ -111,7 +114,7 @@ instance Bits T where { \
 instance Fractional T where { \
    (T x) / (T y)  = T (x / y) ; \
    recip   (T x)  = T (recip x) ; \
-   fromRational        r = T (fromRational r) }
+   fromRational r = T (fromRational r) }
 
 #define INSTANCE_FLOATING(T) \
 instance Floating T where { \
@@ -168,41 +171,41 @@ instance Storable T where { \
 
 #else /* __GLASGOW_HASKELL__ */
 
-/* GHC can derive any class for a newtype, so we make use of that
- * here...
- */
+--  // GHC can derive any class for a newtype, so we make use of that here...
 
-#define NUMERIC_CLASSES  Eq,Ord,Num,Enum,Storable
-#define INTEGRAL_CLASSES Bounded,Real,Integral,Bits
-#define FLOATING_CLASSES Real,Fractional,Floating,RealFrac,RealFloat
+#define ARITHMETIC_CLASSES  Eq,Ord,Num,Enum,Storable,Real
+#define INTEGRAL_CLASSES Bounded,Integral,Bits
+#define FLOATING_CLASSES Fractional,Floating,RealFrac,RealFloat
 
-#define NUMERIC_TYPE(T,C,S,B) \
-newtype T = T B deriving (NUMERIC_CLASSES); \
+#define ARITHMETIC_TYPE(T,C,S,B) \
+newtype T = T B deriving (ARITHMETIC_CLASSES); \
 INSTANCE_READ(T,B); \
 INSTANCE_SHOW(T,B); \
 INSTANCE_TYPEABLE0(T,C,S) ;
 
 #define INTEGRAL_TYPE(T,C,S,B) \
-newtype T = T B deriving (NUMERIC_CLASSES, INTEGRAL_CLASSES); \
+newtype T = T B deriving (ARITHMETIC_CLASSES, INTEGRAL_CLASSES); \
 INSTANCE_READ(T,B); \
 INSTANCE_SHOW(T,B); \
 INSTANCE_TYPEABLE0(T,C,S) ;
 
 #define FLOATING_TYPE(T,C,S,B) \
-newtype T = T B deriving (NUMERIC_CLASSES, FLOATING_CLASSES); \
+newtype T = T B deriving (ARITHMETIC_CLASSES, FLOATING_CLASSES); \
 INSTANCE_READ(T,B); \
 INSTANCE_SHOW(T,B); \
 INSTANCE_TYPEABLE0(T,C,S) ;
 
 #define INSTANCE_READ(T,B) \
 instance Read T where { \
-   readsPrec           = unsafeCoerce# (readsPrec :: Int -> ReadS B); \
-   readList            = unsafeCoerce# (readList  :: ReadS [B]); }
+   readsPrec            = unsafeCoerce# (readsPrec :: Int -> ReadS B); \
+   readList             = unsafeCoerce# (readList  :: ReadS [B]); }
 
 #define INSTANCE_SHOW(T,B) \
 instance Show T where { \
-   showsPrec           = unsafeCoerce# (showsPrec :: Int -> B -> ShowS); \
-   show                        = unsafeCoerce# (show :: B -> String); \
-   showList            = unsafeCoerce# (showList :: [B] -> ShowS); }
+   showsPrec            = unsafeCoerce# (showsPrec :: Int -> B -> ShowS); \
+   show                 = unsafeCoerce# (show :: B -> String); \
+   showList             = unsafeCoerce# (showList :: [B] -> ShowS); }
 
 #endif /* __GLASGOW_HASKELL__ */
+
+#endif