implemented type constraints