more correct version
strategies for mixed sets of types
remove the produce and simplify code that's no longer used