make type signatures generic