Solve a resource with a value.

        Arguments
        ---------
        value : ?
            A value to solve in combination with the given resource. The first filter of the
            resource will be applied on this value (next filters on the result of the previous
            filter).
        resource : dataql.resources.Resource
            An instance of a subclass of ``Resource`` to solve with the given value.

        Returns
        -------
        (depends on the implementation of the ``coerce`` method)

        Raises
        ------
        CannotSolve
            If a solver accepts to solve a resource but cannot finally solve it.
            Allows ``Registry.solve_resource`` to use the next available solver.

        Notes
        -----
        This method simply calls ``solve_value``, then ``coerce`` with the result.
        To change the behavior, simply override at least one of these two methods.

def solve(self, value, resource):
        """Solve a resource with a value.

        Arguments
        ---------
        value : ?
            A value to solve in combination with the given resource. The first filter of the
            resource will be applied on this value (next filters on the result of the previous
            filter).
        resource : dataql.resources.Resource
            An instance of a subclass of ``Resource`` to solve with the given value.

        Returns
        -------
        (depends on the implementation of the ``coerce`` method)

        Raises
        ------
        CannotSolve
            If a solver accepts to solve a resource but cannot finally solve it.
            Allows ``Registry.solve_resource`` to use the next available solver.

        Notes
        -----
        This method simply calls ``solve_value``, then ``coerce`` with the result.
        To change the behavior, simply override at least one of these two methods.

        """

        result = self.solve_value(value, resource)
        return self.coerce(result, resource)