public function call($presenter, array $data = [])
    {
        if ($presenter instanceof PresenterInterface) {
            return $this->callPresenter([$presenter, '__invoke'], $data);
        }
        if (is_callable($presenter)) {
            return $this->callPresenter($presenter, $data);
        }
        if ($resolver = $this->builder->getContainer()) {
            return $this->callPresenter($resolver->get($presenter), $data);
        }
        throw new \BadMethodCallException('cannot resolve a presenter.');
    }