package x10.types.constraints;
import x10.constraint.XFailure;
/**
* A ConstraintMaker is used in circumstances where a lazy or
* delayed evaluation of a constraint is appropriate. A typical situation is
* that the type checker needs to determine whether S is a subtype of T, given
* the current typing environment Gamma. Now we need to determine if c(S) (the
* constraint of S) entails c(T) (the constraint of T), given Gamma. So we
* encapsulate the constraint projection from Gamma into a ConstraintMaker,
* so that entailment can force evaluation only if it needs to (i.e. when it
* finds a basic constraint
*
* @author vj
*
*/
public interface ConstraintMaker {
/**
* Produce the constraint.
* @return
* @throws XFailure
*/
CConstraint make() throws XFailure;
}