Define different typeclasses by opening and reopening classes

Undecided as to whether this might offer more clarity to the reader.