Marcin 'Qrczak' Kowalczyk mk167280 at
Wed Jan 3 07:46:37 EST 2001

On Wed, 3 Jan 2001, Fergus Henderson wrote:

> By "they", I mean the Haskell routines under discussion.

OK, I always thought that Haskell's FFI docs should document what they
assume about the C implementation which is not guaranteed by ISO/ANSI.

For example that pointers are physically amorphic, i.e. that
sizeof (int *) == sizeof (char *), and that
    void poke1 (int **p, int *x) {*p = x;}
    void poke2 (int **p, int *x) {*(char **) p = (char *) x;}
are equivalent, etc. - this follows from the existance of
    instance Storable (Ptr a)

foreign export dynamic is not implementable portably at all. This is a
different kind of assumption - Haskell's FFI assumes that there exist a
way do implement this on the C implementation in question. Usually it is
processor-specific (unless the C implementation provides some generic
means which would allow that - I haven't heard of it and gcc does not
provide them).

Marcin 'Qrczak' Kowalczyk

More information about the FFI mailing list