The numeric c types are (effectively) integral, too.
Jeff Shaw
shawjef3 at gmail.com
Wed Mar 27 17:08:37 CET 2013
On Wednesday, March 27, 2013 11:30:24 AM, Henning Thielemann wrote:
> Writing orphan instances is generally a bad idea. Instead you could
> put your roundTo function into a nice package and import it
> everywhere.
Yup! So let's put the Integral, etc. instances right in
Foreign.C.Types. That way no one will make the mistake you're accusing
me of.
> I don't think that an Integral instance is the right way
> to go, since it would imply the signature:
>
> div :: CTime -> CTime -> CTime
>
> and the quotient of two time values is not a time.
That is irrelevant. CTime is a newtype of an integer type, and the
quotient of two integers is an integer. Foreign.C.Types certainly
doesn't have a problem dividing even stranger things, like graphemes by
graphemes.
I'm quite sure that the reason that CTime doesn't have an Integral
instance is that technically the C spec allows time_t to be a float.
However, since time_t is practically always an integer value, we should
expose that by defining the Integral instance right in Foreign.C.Types.
I looked through the header files for FreeBSD's platforms, and time_t
is always an __int32 or __int64. Maybe Linux or NetBSD can provide an
exception.
Jeff
More information about the Libraries
mailing list