typelevel/scala — pull request #70 by non (2014-09-30 22:38:08+00:00)
Title: Provide syntax for type lambdas.

This commit adds a syntax for type functions that mirrors the
existing syntax for value functions. The underlying representation
for these types uses type projections, and is exactly the same
as those produced by the ({type L...})#L syntax.

Here are some examples:

[x] => Either[String, x]
[-x, +y] => (x, Int) => y
[y, x] => Map[x, y]
[x[_]] => x[Double]

This commit also changes how these types are pretty-printed, to
ensure that the type the user is shown matches the type they
would specify.

There's an interesting wrinkle around type lambda currying. It
was already possible to nest type lambdas, but this syntax makes
it much easier to do. However, these types generally don't work
properly, so they should be avoided.

Fixes #6.