package ru.m.signal; typedef Receiver = T -> Void; class Signal { private var receivers:Array>; public function new() { receivers = []; } public function connect(receiver:Receiver):Void { receivers.push(receiver); } public function disconnect(receiver:Receiver):Void { receivers.remove(receiver); } public function emit(value:T):Void { for (receiver in receivers) { receiver(value); } } }