Maybe allow both types and values? param type T param long len How should generic types work with type qualifiers, in particular with the `shared` type qualifier? Maybe it should be declared which functions allow or require or don't support `shared`? (Dito for the type itself) Generic code can only touch references, not access the objects themselves. `shared` should be fine? No qualfier sould also be fine? (Because non-var can be shared). I think the problem would be `var` without shared. Related: Maybe there should be a `keep` keyword after all? Passing a non-shared non-var object to a function, and then being able to (if there's no other references) use it as var, could be useful. (The alternative is of course to copy the objects).