No instance for (Fractional Int32)
ggreif at gmail.com
Fri Feb 8 21:27:10 CET 2013
Okay, here is a compile-time check whether a C type is float or integral:
cat <<EOF > detect-float-compile-time.c
typedef char testarray_f[(float)0.4 - (float)0.8 < 0 ? 1 : -1];
typedef char testarray_d[(double)0.4 - (double)0.8 < 0 ? 1 : -1];
typedef char testarray_x[(long double)0.4 - (long double)0.8 < 0 ? 1 : -1];
typedef char testarray_i[(int)0.4 - (int)0.8 < 0 ? 1 : -1];
$ gcc detect-float-compile-time.c -c -o /dev/null
detect-float-compile-time.c:4: error: size of array ‘testarray_i’ is negative
Note that the fourth line errored out, since 'int' is not a float type.
This test should be robust enough for any cross target.
I'll try to fix the configury tomorrow and submit a patch.
On 2/8/13, Gabor Greif <ggreif at gmail.com> wrote:
> On 2/8/13, Stephen Paul Weber <singpolyma at singpolyma.net> wrote:
>> Somebody claiming to be Christopher Vollick wrote:
>>>On Fri, Feb 08, 2013 at 01:20:53PM +0100, Gabor Greif wrote:
>>>> No instance for (Fractional Int32)
>>>> arising from the 'deriving' clause of a data type declaration
>>>> Possible fix:
>>>> use a standalone 'deriving instance' declaration,
>>>> so you can specify the instance context yourself
>>>> When deriving the instance for (Fractional CFloat)
>>>> Has anybody seen this with HEAD?
>> This may be a side effect of the fix for
> Yeah, something with the test that contains the literal double 1.4
> When configure runs, it does not succeed to set HTYPE_IS_INTEGRAL
> to "" and this leads it down the signed/unsigned road.
> Will check tomorrow what is going on here.
> Possibly we need to change the test to C++,
> where compile-time detection of these things
> is a breeze (because of overloading).
> Cheers and thanks,
>> Stephen Paul Weber, @singpolyma
>> See <http://singpolyma.net> for how I prefer to be contacted
>> edition right joseph
>> ghc-devs mailing list
>> ghc-devs at haskell.org
More information about the ghc-devs