Generalized type constraintsby@sinisalouc