Add parametric types

Using `startsWith()` here doesn't seem correct. What if the type is named "arrayfoo"? Seems like this needs a proper parser.