On Wed, 18 Feb 2004, Daan Leijen wrote:

> choose :: a -> a -> a
> choose x y = x
> 
> What is the type of "choose id" if your system is impredicative?
> Either "forall a. (a -> a) -> (a -> a)" or
> "(forall a. a->a) -> (forall a. a->a)" Note that neither of these
> types subsumes the other.

This is bad, but it doesn't seem any worse than what we've got already in
GHC and Hugs. In fact, what we've got is much worse: not only can't we
infer most general types, we can't even determine the meaning of a correct
program without looking at explicit type signatures.

> Anyway, Ben Rudiak's particular case, namely instantiating arguments
> of a type with type schemes, is difficult due to another problem. It
> is very hard to know whether an argument to a type is used
> contra-variantly or co-variantly (or both, or not at all).

I noticed that problem but didn't think about the difficulties of type
constructor parameters. It seems like you could make this work by
extending the kind system, but maybe it's not worth it.

-- Ben

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to