Trait rustc_ap_rustc_data_structures::unify::UnifyValue[][src]

pub trait UnifyValue: Clone + Debug {
    type Error;
    fn unify_values(value1: &Self, value2: &Self) -> Result<Self, Self::Error>;
}
Expand description

Trait implemented for values associated with a unification key. This trait defines how to merge the values from two keys that are unioned together. This merging can be fallible. If you attempt to union two keys whose values cannot be merged, then the error is propagated up and the two keys are not unioned.

This crate provides implementations of UnifyValue for () (which is infallible) and Option<T> (where T: UnifyValue). The option implementation merges two sum-values using the UnifyValue implementation of T.

See also EqUnifyValue, which is a convenience trait for cases where the “merge” operation succeeds only if the two values are equal.

Associated Types

type Error[src]

Defines the type to return when merging of two values fails. If merging is infallible, use the special struct NoError found in this crate, which unlocks various more convenient methods on the unification table.

Required methods

fn unify_values(value1: &Self, value2: &Self) -> Result<Self, Self::Error>[src]

Given two values, produce a new value that combines them. If that is not possible, produce an error.

Implementations on Foreign Types

impl UnifyValue for ()[src]

impl<V> UnifyValue for Option<V> where
    V: UnifyValue
[src]

type Error = <V as UnifyValue>::Error

pub fn unify_values(
    a: &Option<V>,
    b: &Option<V>
) -> Result<Option<V>, <V as UnifyValue>::Error>
[src]

Implementors

impl<T> UnifyValue for T where
    T: EqUnifyValue
[src]

type Error = (T, T)

pub fn unify_values(
    value1: &T,
    value2: &T
) -> Result<T, <T as UnifyValue>::Error>
[src]