data A = A data B = B data C = C data D = D data Sopt > A,B,C data Topt > B,C,D struct Widget a = set :: [a] -> Action b = (.set) (undefined :: Widget Sopt) [B,C]