To elaborate `Foo` without generic parameters is a typeclass that accepts all `Foo` instantiations, as such `Foo is Foo` when passed the and `Foo isnot Foo[string]` when passed a generic instantiation.
> Now I to ponder whether I should actually do this... my init has some args. I personally only use the `init` and `new` convention for my types and they do take arguments. I do wish though that the compiler would analyze generic constraints if they are all concrete types, just instantiate the procedure in place to allow static analysis to kick in.