# Module OpamSolution

    module OpamSolution: sig .. end

Applying solver solutions

    val resolve : ?verbose:bool ->
           OpamState.state ->
           OpamTypes.user_action ->
           requested:OpamTypes.name_set ->
           orphans:OpamTypes.package_set ->
           OpamTypes.atom OpamTypes.request ->
           (OpamSolver.solution, OpamCudf.conflict) OpamTypes.result

Resolve an user request

    val apply : ?ask:bool ->
           OpamState.state ->
           OpamTypes.user_action ->
           requested:OpamPackage.Name.Set.t ->
           OpamSolver.solution -> OpamTypes.solver_result

Apply a solution returned by the solver. If `ask` is not specified, prompts the user whenever the solution isn't obvious from the request

    val resolve_and_apply : ?ask:bool ->
           OpamState.state ->
           OpamTypes.user_action ->
           requested:OpamPackage.Name.Set.t ->
           orphans:OpamTypes.package_set ->
           OpamTypes.atom OpamTypes.request -> OpamTypes.solver_result

Call the solver to get a solution and then call `apply`. If `ask` is not specified, prompts the user whenever the solution isn't obvious from the request

    val check_solution : OpamState.state -> OpamTypes.solver_result -> unit

Raise an error if no solution is found or in case of error.

## Atoms

    val eq_atom : OpamTypes.name -> OpamTypes.version -> OpamTypes.atom

Return an atom with a string version constraint

    val atom_of_package : OpamTypes.package -> OpamTypes.atom

Return a simple atom, with no version constrain, from a package

    val atoms_of_packages : OpamTypes.package_set -> OpamTypes.atom list

Return a list of simple atoms (ie. with no version constraints) from a set of packages

    val eq_atoms_of_packages : OpamTypes.package_set -> OpamTypes.atom list

Return a list of constrained atoms from a set of packages

    val check_availability : ?permissive:bool ->
           OpamState.state -> OpamPackage.Set.t -> OpamTypes.atom list -> unit

Checks that the atoms can possibly be verified (individually) in a package set. Displays an error and exits otherwise. `permissive` just changes the error message.

    val sanitize_atom_list : ?permissive:bool ->
           OpamState.state -> OpamTypes.atom list -> OpamTypes.atom list

Takes a "raw" list of atoms (from the user), and match it to existing packages. Match packages with the wrong capitalisation, and raises errors on non-existing packages, and unavailable ones unless `permissive` is set. Exits with a message on error.

    val sum : OpamTypes.stats -> int

## Stats