meet is not known to be empty if either type involves type params
refactor