> Suppose we are in case 1. Then the programmer has written a too-general
> type signature on f. The programmer *must* know that b=Int in this case
> otherwise his function definition makes no sense. However, I don't really
> see a reason why this should be an error rather than just a warning. If
> some other module K imports both U and (for instance) I2, then we'll get a
> fundep clash and the whole program will be invalid.
I now retract this comment :). Clearly this is just as bad as saying:
> f :: Bool -> b
> f x = x
since this claims that it will take a Bool and produce a value of type b
for all types b. However, would it be all right to say (in
pseudo-Haskell):
> f :: exists b . Bool -> b
> f x = x
?
Here, we're simply claiming that there is *some* type b for which f takes
a Bool and produces a b?
I believe this same analysis extends to something like:
> class C a b | a -> b where {}
> instance C Int Int where {}
> f :: exists b . C Int b => Int -> b
> f i = i
It seems that this would be legal in a language like haskell but which
allowed existensial quantification.
Am I correct?
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell