In this particular example, there should be a compile-time error, complaining that `f` doesn't have a concrete return type and the later cannot be inferred from the body of the proc. Before failing, the compiler would have inferred `T` to be the type class `string|int`. The code should compile if you remove just one of the four push/pop procs.
Adding more procs can always introduce ambiguity in generics and normal code. Notice how the code will be ambiguous even if don't use a concept here, but instead just make `f` a regular "take all" generic proc.
