[Haskell-beginners] Meaning of '!' in record defintion? UNPACK?

Daniel Fischer daniel.is.fischer at web.de
Thu Feb 26 06:55:56 EST 2009

Am Donnerstag, 26. Februar 2009 12:36 schrieb Magnus Therning:
> Are there any guarantees here, or is it just me telling the compiler
> to please do what I say, but the compiler can decide not to follow my
> wishes?

I don't think there are guarantees, as the section ends with:

"If a field cannot be unpacked, you will not get a warning, so it might be an 
idea to check the generated code with -ddump-simpl.

See also the -funbox-strict-fields flag, which essentially has the effect of 
adding {-# UNPACK #-} to every strict constructor field."

But it should be very likely to do what you want (of course, always compile 
with -O or -O2).

> Is address aligning predictable?

Absolutely no idea, sorry.

> I'm basically wondering if it'd be possible to to use this mechanism
> to avoid using FFI when reading data that basically is a dump of
> structs in a C program.

I doubt it, as I understand it, with {-# UNPACK #-}, you'll have the layout

constuctor rawdata

and the C structs won't have the constructor.

> /M


More information about the Beginners mailing list