public function defineCallbacks(array $callbacks)
    {
        $defaultOptions = [
            'scope'      => ['kind'],
            'terminator' => null,
            'skipAfterCallbacksIfTerminated' => false,
        ];
        
        foreach ($callbacks as $name => $options) {
            if (is_int($name)) {
                $name    = $options;
                $options = [];
            }
            if (isset($this->chains[$name])) {
                throw new Exception\RuntimeException(
                    "Callback '%s' already defined",
                    $name
                );
            }
            $options = array_merge($defaultOptions, $options);
            $this->chains[$name] = $options;
        }
        return $this;
    }