use crate Domain;
use crate IterResolved;
use crate ReifyIn;
/// Derive [reified](crate::value::ReifyIn) [values](crate::value) potential
/// resolved states.
///
/// [Query] is implemented for [`Goals`](crate::goals) and
/// [`States`](crate::State) (and other types), meaning you can call
/// [`.query()`](Query::query()) on them with any type that implements
/// [ReifyIn](crate::value::ReifyIn) for a matching [Domain].
///
/// This is a convenient wrapper around the pattern of iterating over a sequence
/// of [`ResolvedStates`](crate::ResolvedState) and calling
/// [`state.reify(query)`](crate::ResolvedState::reify()) and returning only the
/// valid, fully resolved results. Query is implemented on a variety of
/// [`State`](crate::State) related types, allowing it to be used in many
/// contexts.
///
/// A blanket impl covers anything that implements [`IterResolved`], so many
/// types including [`Goal`](crate::goals) and [`State`](crate::State) are
/// queryable.