distinct types design