generic type declaration