Add parametric types

shouldn't this verify the `"..."` is only applied to the last argument, and that all proceeding arguments match the correct type?