API change, with an opaque type that represents the injection/extraction of types;
named argument ~inj for all functions that need it;
updated tests