Storable tuples and what is 'alignment'?

Alastair Reid alastair at
Tue Aug 6 17:33:44 EDT 2002

Redirected to ffi at

> 1) Why aren't there built in Storable instances for tuples?  Writing
> my own is a pain and in keeping with the 'up to 7tuple' limit, I
> think built in instances would be nice

Probably because we've no idea why you'd want to do it.

The usual deal is that you want to interface to a C struct like this:

  struct pt { int x; int y; };

and want to access it from Haskell so you write something like:

  type Pt = (CInt,CInt)

  instance Storable Pt where
    alignment = #const alignOf(struct pt)
    sizeOf    = #const sizeof(struct pt)
    peek p    = do
                  x <- peek (p + #const(offsetOf(struct pt, x)))
                  y <- peek (p + #const(offsetOf(struct pt, y)))
                  return (x,y)
    poke ...  = ...

That is, for each C type you encounter, you write a custom instance.

An important thing about this is that you're definitely using the
right offset to access the field - there's nothing in the C standard
that requires the obvious relationship between alignment/size and
offset to hold.

So what are you doing that needs Storable instances for arbitrary tuples?

Alastair Reid                 alastair at  
Reid Consulting (UK) Limited

More information about the FFI mailing list