Polymorphic strict fields

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Tue May 1 06:54:36 EDT 2007


On Mon, 2007-04-30 at 19:47 -0700, Iavor Diatchki wrote:

> All of this leads me to think that perhaps we should not allow
> strictness annotations on polymorphic fields.  Would people find this
> too restrictive?

Yes.

Our current implementation of stream fusion relies on this:

data Stream a = forall s. Unlifted s =>
                          Stream !(s -> Step a s)  -- ^ a stepper function
                                 !s                -- ^ an initial state

We use strictness on polymorphic (class constrained) fields to simulate
unlifted types. We pretend that the stream state types are all unlifted
and have various strict/unlifted type constructors:

data (Unlifted a, Unlifted b) => a :!: b = !a :!: !b
instance (Unlifted a, Unlifted b) => Unlifted (a :!: b) where ...


Duncan



More information about the Haskell-prime mailing list