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

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to