Как реализовать шаблон проектирования наблюдателя чисто функционально?

Допустим, я хочу реализовать шину событий, используя язык программирования OO. Я мог бы сделать это (псевдокод):

class EventBus

    listeners = []

    public register(listener):
        listeners.add(listener)

    public unregister(listener):
        listeners.remove(listener)

    public fireEvent(event):
        for (listener in listeners):
            listener.on(event)

На самом деле это шаблон наблюдателя, но он используется для управляемой событиями потока управления приложения.

Как бы вы реализовали этот шаблон, используя язык функционального программирования (например, один из ароматы lisp)?

Я спрашиваю об этом, потому что, если не использовать объекты, все равно потребуется какое-то состояние для поддержания коллекции всех слушателей. Более того, поскольку коллекция слушателей со временем меняется, невозможно создать чисто функциональное решение, верно?

23
задан ivo 5 August 2011 в 09:42
поделиться