[Haskell-cafe] Trouble representing a set of flags

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Tue Feb 6 04:39:22 EST 2007


On Mon, 2007-02-05 at 19:26 -0800, Stefan O'Rear wrote:
> I have a structure:
> 
> data Attr = Attr { fg :: !Color,
>                    bg :: !Color,
>                    bold :: !Bool,
>                    blink :: !Bool,
>                    rv :: !Bool,
>                    halfBright :: !Bool,
>                    underline :: !Bool
>                  } deriving(Eq,Show,Ord)
> 
> newtype Color = Color Int deriving(Eq,Show,Ord)


> (Also, GHC seems unable to unbox strict fields that are newtypes.  Can
> this be done, or should I abandon type safety and use type synonyms?)

You have to tell GHC that you want fields to be unboxed (this is because
it's not always an optimisation). You can either do it for all strict
fields in the whole module by using the -funbox-strict-fields flag, or
on a per field basis with:

data Attr = Attr { fg :: {-# UNPACK #-} !Color,
                   bg :: {-# UNPACK #-} !Color,
                   ...


Duncan



More information about the Haskell-Cafe mailing list