
| > | On a related note, these are also apparently allowed (in 6.10.4): | > | f :: forall a. (Eq a => a -> a) -> a -> a | > | -- the Eq context prevents the function from ever being called. | > | > That's not true. E.g. | > f ((==) True) True | > works fine. | | What I meant is that f cannot call its argument. Oh now I see. Yes, that's true. But it could be hard to work out: f :: forall a. (C a, D a) => (E [a] => a -> a) -> Int Can 'f' call its argument? Well, it depends if you can deduce E [a] from (C a, D a). And if this was a local type signature there might be other constraints in scope. Anyway, it's certainly true that some types are more useful than others (e.g. (forall a. Int -> a) must be the constant bottom function), but I don't think it's fruitful to try to exclude them *as types*. Simon