with-fields := λ(: tt Type). (: ( (match (slot( tt 'Fields_s )) ( () ( (TGround( 'Fields_s _ )) () ) ( _ ( (let class (with-only-class tt)) (let tag (with-only-tag tt)) (if (&&( (non-zero tag) (non-zero class) )) ( (let ft (fields-of-tag( tag class ))) (set tt (and( tt ft ))) ) ()) )) )) tt ) Type);