> data D1 = A | B > data D2 = A2 | B2 | C2 > > data D3 = D !D1 !D2 -- could fit inside e.g. a Word8? > > Is there an elegant way to achieve this manually (if I know I'll need > large arrays of D3s, for instance -- can I map them to arrays of Word8 > or a similar type?) Sure. Write an instance of IOUArray which knows how to pack them :).