using generic type