function chain(event, sythensize) {
        const fn = (listener, thisArgs, disposables) => {
            const cs = sythensize(new ChainableSynthesis());
            return event(function (value) {
                const result = cs.evaluate(value);
                if (result !== HaltChainable) {
                    listener.call(thisArgs, result);
                }
            }, undefined, disposables);
        };
        return fn;
    }
Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.

@example
```
// Normal
const onEnterPressNormal = Event.filter(
  Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),
  e.keyCode === KeyCode.Enter
).event;

// Using chain
const onEnterPressChain = Event.chain(onKeyPress.event, $ => $
  .map(e => new StandardKeyboardEvent(e))
  .filter(e => e.keyCode === KeyCode.Enter)
);
```