mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
Canonicalize optional record fields
This commit is contained in:
parent
ae05f0eb0c
commit
8fc9a450b3
1 changed files with 6 additions and 6 deletions
|
@ -16,7 +16,7 @@ use roc_region::all::{Located, Region};
|
||||||
use roc_types::subs::Variable;
|
use roc_types::subs::Variable;
|
||||||
use roc_types::types::AnnotationSource::{self, *};
|
use roc_types::types::AnnotationSource::{self, *};
|
||||||
use roc_types::types::Type::{self, *};
|
use roc_types::types::Type::{self, *};
|
||||||
use roc_types::types::{Alias, Category, PReason, Reason};
|
use roc_types::types::{Alias, Category, PReason, Reason, RecordField};
|
||||||
|
|
||||||
/// This is for constraining Defs
|
/// This is for constraining Defs
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default, Debug)]
|
||||||
|
@ -110,7 +110,7 @@ pub fn constrain_expr(
|
||||||
|
|
||||||
field_vars.push(field_var);
|
field_vars.push(field_var);
|
||||||
field_exprs.insert(label.clone(), loc_field_expr);
|
field_exprs.insert(label.clone(), loc_field_expr);
|
||||||
field_types.insert(label.clone(), field_type);
|
field_types.insert(label.clone(), RecordField::Required(field_type));
|
||||||
|
|
||||||
constraints.push(field_con);
|
constraints.push(field_con);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ pub fn constrain_expr(
|
||||||
symbol,
|
symbol,
|
||||||
updates,
|
updates,
|
||||||
} => {
|
} => {
|
||||||
let mut fields: SendMap<Lowercase, Type> = SendMap::default();
|
let mut fields: SendMap<Lowercase, RecordField<Type>> = SendMap::default();
|
||||||
let mut vars = Vec::with_capacity(updates.len() + 2);
|
let mut vars = Vec::with_capacity(updates.len() + 2);
|
||||||
let mut cons = Vec::with_capacity(updates.len() + 1);
|
let mut cons = Vec::with_capacity(updates.len() + 1);
|
||||||
for (field_name, Field { var, loc_expr, .. }) in updates.clone() {
|
for (field_name, Field { var, loc_expr, .. }) in updates.clone() {
|
||||||
|
@ -156,7 +156,7 @@ pub fn constrain_expr(
|
||||||
field_name.clone(),
|
field_name.clone(),
|
||||||
&loc_expr,
|
&loc_expr,
|
||||||
);
|
);
|
||||||
fields.insert(field_name, tipe);
|
fields.insert(field_name, RecordField::Required(tipe));
|
||||||
vars.push(var);
|
vars.push(var);
|
||||||
cons.push(con);
|
cons.push(con);
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ pub fn constrain_expr(
|
||||||
let mut rec_field_types = SendMap::default();
|
let mut rec_field_types = SendMap::default();
|
||||||
|
|
||||||
let label = field.clone();
|
let label = field.clone();
|
||||||
rec_field_types.insert(label, field_type.clone());
|
rec_field_types.insert(label, RecordField::Required(field_type.clone()));
|
||||||
|
|
||||||
let record_type = Type::Record(rec_field_types, Box::new(ext_type));
|
let record_type = Type::Record(rec_field_types, Box::new(ext_type));
|
||||||
let record_expected = Expected::NoExpectation(record_type);
|
let record_expected = Expected::NoExpectation(record_type);
|
||||||
|
@ -664,7 +664,7 @@ pub fn constrain_expr(
|
||||||
|
|
||||||
let mut field_types = SendMap::default();
|
let mut field_types = SendMap::default();
|
||||||
let label = field.clone();
|
let label = field.clone();
|
||||||
field_types.insert(label, field_type.clone());
|
field_types.insert(label, RecordField::Required(field_type.clone()));
|
||||||
let record_type = Type::Record(field_types, Box::new(ext_type));
|
let record_type = Type::Record(field_types, Box::new(ext_type));
|
||||||
|
|
||||||
let category = Category::Accessor(field.clone());
|
let category = Category::Accessor(field.clone());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue