   (MkTag x) * (MkTag y) = MkTag (x*y)
   abs (MkTag x) = MkTag (abs x)
   signum (MkTag x) = MkTag (signum x)
-  fromInteger x 
-    | fromIntegral x > tagUpperBound = error "Tag value is over the MPI_TAG_UB" 
+  fromInteger x
+    | fromIntegral x > tagUpperBound = error "Tag value is over the MPI_TAG_UB"
     | x < 0             = error "Negative Tag value"
     | otherwise         = MkTag (fromIntegral x)
 


{# enum ThreadSupport {underscoreToCase} deriving (Eq,Ord,Show) #}

{- From MPI 2.2 report:
 "To make it possible for an application to interpret an error code, the routine
 MPI_ERROR_CLASS converts any error code into one of a small set of standard
 error codes"
-}

data MPIError
   = MPIError
     { mpiErrorClass :: ErrorClass
     , mpiErrorString :: String
     , mpiErrorCode :: CInt
     }
   deriving (Eq, Show, Typeable)



{# context prefix = "MPI" #}

-- | Pointer to memory buffer that either holds data to be sent or is
--   used to receive some data. You would
--   probably have to use 'castPtr' to pass some actual pointers to
--   API functions.
type BufferPtr = Ptr ()

-- | Count of elements in the send/receive buffer
type Count = CInt

{-
