| > I can also imagine predicates that do not mention locally-quantified | > variables - the assumption must be that they mention variables bound on | > the LHS of the datatype decl instead? e.g. the Show predicate here: | > | > data Foo a b = Foo a b | > | Bar (forall c . (Show b, Relation b c) => (b,c)) | > | > Hmm, maybe a simpler version of this example would illustrate what you | > mean by the proposal (first of the three bullets) to allow an empty | > quantifier list: | > | > data Foo a b = Foo a b | > | Bar (forall . Show b => b) | > | > In which case, does this even count as a polymorphic component at all? | > Is it not rather GADT-like instead? | > | > data Foo a b where | > Foo :: a -> b -> Foo a b | > Bar :: Show b => b -> Foo a b | | I was thinking that we should allow those special cases because I | could not see a reason to disallow them (rather then having a | compelling example to use them). You make a good point though, that | some of them might indicate an error in the program. So, I guess, the | main decision is: do we want to make them illegal (i.e., require an | error) or suggest that implementations report a warning? I have no | strong feelings either way, but I guess we need to pick something.
I think I know what we should do on this particular point. I've even documented it here: http://www.haskell.org/ghc/dist/current/docs/users_guide/data-type-extensions.html#gadt-style I would like to urge this design, or one close to it, for Haskell'. Note that this is *not* the same as adopting GADTs. Simon _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://www.haskell.org/mailman/listinfo/haskell-prime