Added a bunch of features for using type parameters with typeclasses