type class sorta thingy