axiomatic type classes