scalaz/scalaz — pull request #621 by S11001001 (2014-01-08 02:06:36+00:00)
Title: `apply` methods for Unapply companion & friends.

A fun REPL toy for discovering instances & avoiding type lambdas.

```scala
scala> Unapply[Monad, EitherT[NonEmptyList, Int, String]]
res0: U.type{type M[A] = scalaz.EitherT[scalaz.NonEmptyList,Int,A]; type A = String} = scalaz.Unapply_2$$anon$5@2609c830

scala> Unapply[Monad, EitherT[NonEmptyList, Int, String]].TC.point(42)
res1: scalaz.EitherT[scalaz.NonEmptyList,Int,Int] = EitherT(NonEmptyList(\/-(42)))
```

I would think `U.type` would be a sufficient result type for the methods, but that's not how it works out, for whatever reason.