add some more constraints on types