struct sensor:
    event measured: func(i32)

func (source sensor) publish(reading: i32):
    source.measured.emit(reading)

struct display:
    latest_reading: i32 = 0

func (screen display) update(reading: i32):
    screen.latest_reading = reading

func entry(reading: i32) -> i32:
    var source = sensor()
    var screen = display()
    source.measured += screen.update
    source.publish(reading)
    return screen.latest_reading
