Why doesn't Haskell have type-level lambda abstractions?
- by Petr Pudlák
Are there some theoretical reasons for that (like that the type checking or type inference would become undecidable), or practical reasons (too difficult to implement properly)?
Currently, we can wrap things into newtype like
newtype Pair a = Pair (a, a)
and then have Pair :: * -> *
but we cannot do something like ?(a:*). (a,a).
(There are some languages that have them, for example, Scala does.)