The `As a` type is `Equality' a a` and is convenient for constraining polymorphism.

Idea due to @shachaf. I'm just writing the patch.