NB. The stack object template which inherits a print method data =: '' stack_z_ =: monad def 0 'method value' =. 2 {. y. if. method -: 'type' do. 'stack' elseif. method -: 'emptyp' do. 0 = # data elseif. method -: 'push' do. for_effect_only data =: (< value) , data elseif. method -: 'top' do. if. 0 = # data do. 'top: stack is empty' else. > {. data end. elseif. method -: 'pop' do. if. 0 = # data do. 'pop: stack is empty' else. for_effect_only data =: }. data end. elseif. method -: 'size' do. # data elseif. method -: 'print' do. if. 0 = # data do. 'print: stack is empty' else. for_effect_only display 'top of stack' print 'print' ; < data end. elseif. 1 do. root_object method ; value end. )