I think number one can be handled with type classes. Usually if you want to pass in radically different structures there's some common underlying structure.
Still the usability feature of being able to quickly create arbitrary union types is undeniable (Julia uses something similar as a main source of polymorphism and personally I think it is amazing)