This query is regarding Foreign.C.Types.

Now that the constructors for CClock, CTime, CUSeconds, and CSUSeconds are exposed, it's become clear that these are Ints or Words. Technically on some architectures they could be floating point, but I would bet that on all architectures that Haskell is ever used on, none of these are floating point types. Adding Bounded, Enum, Integral, and Bits instances to the "numeric" types would break nothing and ease situations such as this:

roundTo :: CTime -> CTime -> CTime
roundTo a b = (a `div` b) * b

This works right now, but requires a trivial Integral class be written for every program that wants to do it.

instance Integral CTime where
  quot (CTime a) (CTime b) = CTime (a `quot` b)
  rem (CTime a) (CTime b) = CTime (a `rem` b)
  div (CTime a) (CTime b) = CTime (a `div` b)
  mod (CTime a) (CTime b) = CTime (a `mod` b)
  quotRem (CTime n) (CTime d) = (\(d,m) -> (CTime d, CTime m)) (quotRem n d)
  divMod (CTime n) (CTime d) = (\(d,m) -> (CTime d, CTime m)) (divMod n d)
  toInteger (CTime t) = toInteger t

I think this and the other trivial instances should just go right into Foreign.C.Types for all the "numeric" types in Foreign.C.Types. Any thoughts to the contrary?

Jeff