improve unions/intersections
create union/inters types w/correct type args
simplify the code a bit
fix a couple of things
simplify the code a bit