
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