Newspeak3 'Root' class CounterUI usingPlatform: p = ( | private Subject = p hopscotch Subject. private Presenter = p hopscotch Presenter. | ) ( public class Counter = ( | public count ::= 0. | ) ( ) : ( ) class CounterPresenter onSubject: s = Presenter onSubject: s( ) ( definition = ( ^row: { label: subject count. mediumBlank. button: 'increment' action: [updateGUI: [subject increment]]. button: 'decrement' action: [updateGUI: [subject decrement]]. button: 'reset' action: [updateGUI: [subject clear]]. }. ) public isKindOfCounterPresenter = ( ^true ) isMyKind: other = ( ^other isKindOfCounterPresenter ) ) : ( ) public class CounterSubject onModel: m = Subject onModel: m( ) ( createPresenter ^ = ( ^CounterPresenter onSubject: self ) public isKindOfCounterSubject = ( ^true ) isMyKind: other = ( ^other isKindOfCounterSubject ) public decrement = ( model count: count - 1 ) public increment = ( model count: count + 1 ) public count ^ = ( ^model count ) public clear = ( model count: 0 ) ) : ( ) ) : ( )