Schema unification mode

This commit is contained in:
Ayaz Hafiz 2023-07-16 12:42:58 -05:00
parent 5ea9bd19b2
commit d6c24accef
No known key found for this signature in database
GPG Key ID: 0E2A37416A25EF58
2 changed files with 25 additions and 5 deletions

View File

@ -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,

View File

@ -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!()
}
}
}