adding several new higher-kinded typeclasses