make generic types simpler

This was horribly complicated; what was I thinking?