Редактировать: Извините, я неправильно прочитал вопрос и подумал, что вы спрашивали о том, чтобы сделать это с hsc2hs, а не без. Неправильное выравнивание может привести к неверным данным и вызвать сбои (подумайте, если вы распределяете массив структур), поэтому вам действительно следует использовать что-то переносимое.
Согласно поваренной книге FFI , вы можете определить
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
, который затем используется как
instance Storable Struct where
alignment _ = #{alignment my_struct}
sizeOf _ = #{size my_struct}
Ключевое слово alignment
должно быть доступно в ghc> 7.2.1, поэтому вам не нужно определять его самостоятельно с очень новыми ghc.