Add parametric types

we should discuss if we want to support both forms, and if so which one should be default