ROLE: Cx ; ROLE: Ca ; TUPLE: Cai <{ Ca } ; TUPLE: Cb <{ Ca Cx } ; TUPLE: Cc <{ Cb } ; GENERIC: m1 ( a -- b ) M: Ca m1 drop "m1a" ; M: Cx m1 drop "m1x" ; [ "m1a" ] [ Cai new m1 ] unit-test [ "m1a" ] [ Cb new m1 ] unit-test [ "m1a" ] [ Cc new m1 ] unit-test : f1a ( -- o ) Cai new m1 ; : f1b ( -- o ) Cb new m1 ; : f1c ( -- o ) Cc new m1 ; [ "m1a" ] [ f1a ] unit-test [ "m1a" ] [ f1b ] unit-test [ "m1a" ] [ f1c ] unit-test