The numeric c types are (effectively) integral, too.
shawjef3 at gmail.com
Wed Mar 27 16:17:05 CET 2013
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
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?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Libraries