We should implement compound type validation. e.g. validating that each element is `Foo` in `t_list[Foo]`