mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-20 07:17:50 +03:00
Schema unification mode
This commit is contained in:
parent
5ea9bd19b2
commit
d6c24accef
@ -2,7 +2,7 @@ use roc_types::subs as s;
|
||||
|
||||
use crate::{
|
||||
convert::AsSchema,
|
||||
schema::{Event, UnificationMode, VariableEvent},
|
||||
schema::{Event, VariableEvent},
|
||||
};
|
||||
|
||||
pub struct Collector {
|
||||
@ -61,11 +61,16 @@ impl Collector {
|
||||
});
|
||||
}
|
||||
|
||||
pub fn start_unification(&mut self, subs: &s::Subs, left: s::Variable, right: s::Variable) {
|
||||
pub fn start_unification(
|
||||
&mut self,
|
||||
subs: &s::Subs,
|
||||
left: s::Variable,
|
||||
right: s::Variable,
|
||||
mode: roc_solve_schema::UnificationMode,
|
||||
) {
|
||||
let left = left.as_schema(subs);
|
||||
let right = right.as_schema(subs);
|
||||
// TODO add mode
|
||||
let mode = UnificationMode::Eq;
|
||||
let mode = mode.as_schema(subs);
|
||||
let subevents = Vec::new();
|
||||
self.add_event(Event::Unification {
|
||||
left,
|
||||
|
@ -9,7 +9,8 @@ use roc_types::{
|
||||
|
||||
use crate::schema::{
|
||||
AliasKind, AliasTypeVariables, ClosureType, Content, NumericRange, NumericRangeKind, Rank,
|
||||
RecordField, RecordFieldKind, Symbol, TagUnionExtension, UnspecializedClosureType, Variable,
|
||||
RecordField, RecordFieldKind, Symbol, TagUnionExtension, UnificationMode,
|
||||
UnspecializedClosureType, Variable,
|
||||
};
|
||||
|
||||
pub trait AsSchema<T> {
|
||||
@ -305,3 +306,17 @@ impl AsSchema<Rank> for subs::Rank {
|
||||
Rank(self.into_usize() as _)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsSchema<UnificationMode> for roc_solve_schema::UnificationMode {
|
||||
fn as_schema(&self, _subs: &Subs) -> UnificationMode {
|
||||
if self.is_eq() {
|
||||
UnificationMode::Eq
|
||||
} else if self.is_present() {
|
||||
UnificationMode::Present
|
||||
} else if self.is_lambda_set_specialization() {
|
||||
UnificationMode::LambdaSetSpecialization
|
||||
} else {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user