nominal M nominal N nominal O nominal P type A = { member member1: & N M member member2: | M N } type B = forall X. { member member1 : & X A } member outer1 : box { member member1: & B True type T = & B A member member2 : | (& T O) P type S = & B False }