Codificação de tipo existencial em Scala

Podemos escrever um existencial explicitamente como este em Scala:

type Exists[P[_]] = P[T] forSome { type T }

Agora vamos apresentar um tipo lambda:

({ type λ[A] = AnotherType[A] })#λ 

O tipo lambda declara um módulo embutido com um único membro de tipo, então usamos a projeção de tipo para extrair o tipo parametrizado não aplicado. O tipo é do tipo * -> *, o que significa que podemos passá-lo para Exists, que espera algo do tipo * -> *.

trait SomeType[A, B]
class HiddenType[A](x: Exists[({ type λ[B] = SomeType[A, B] })#λ])

Eu descobri que essa é uma maneira interessante de ocultar um tipo, ela funciona muito bem se você quiser existenciais do estilo Haskell em seus construtores.