fix openness inference for empty tag

This commit is contained in:
Anton-4 2024-07-06 16:29:10 +02:00
parent 3abc276937
commit 7180a93273
No known key found for this signature in database
GPG key ID: 0971D718C0A9B937
2 changed files with 21 additions and 3 deletions

View file

@ -327,6 +327,8 @@ pub(crate) fn canonicalize_annotation(
AnnotationFor::Opaque => CanPolarity::InOpaque, AnnotationFor::Opaque => CanPolarity::InOpaque,
}; };
//dbg!("111");
let typ = can_annotation_help( let typ = can_annotation_help(
env, env,
pol, pol,
@ -339,6 +341,8 @@ pub(crate) fn canonicalize_annotation(
&mut references, &mut references,
); );
//dbg!(&typ);
Annotation { Annotation {
typ, typ,
introduced_variables, introduced_variables,
@ -955,6 +959,10 @@ fn can_annotation_help(
} }
} }
TagUnion { tags, ext, .. } => { TagUnion { tags, ext, .. } => {
//dbg!(tags);
//dbg!(ext);
let (ext_type, is_implicit_openness) = can_extension_type( let (ext_type, is_implicit_openness) = can_extension_type(
env, env,
pol, pol,
@ -967,8 +975,12 @@ fn can_annotation_help(
roc_problem::can::ExtensionTypeKind::TagUnion, roc_problem::can::ExtensionTypeKind::TagUnion,
); );
//dbg!(&ext_type);
//dbg!(is_implicit_openness);
if tags.is_empty() { if tags.is_empty() {
match ext { //dbg!("emptyy");
/*match ext {
Some(_) => { Some(_) => {
// just `a` does not mean the same as `[]`, so even // just `a` does not mean the same as `[]`, so even
// if there are no fields, still make this a `TagUnion`, // if there are no fields, still make this a `TagUnion`,
@ -980,7 +992,12 @@ fn can_annotation_help(
} }
None => Type::EmptyTagUnion, None => Type::EmptyTagUnion,
} }*/
Type::TagUnion(
Default::default(),
TypeExtension::from_type(ext_type, is_implicit_openness),
)
} else { } else {
let mut tag_types = can_tags( let mut tag_types = can_tags(
env, env,
@ -1173,6 +1190,7 @@ fn can_extension_type(
local_aliases, local_aliases,
references, references,
); );
if valid_extension_type(shallow_dealias_with_scope(scope, &ext_type)) { if valid_extension_type(shallow_dealias_with_scope(scope, &ext_type)) {
if matches!(loc_ann.extract_spaces().item, TypeAnnotation::Wildcard) if matches!(loc_ann.extract_spaces().item, TypeAnnotation::Wildcard)
&& matches!(ext_problem_kind, ExtensionTypeKind::TagUnion) && matches!(ext_problem_kind, ExtensionTypeKind::TagUnion)

View file

@ -3,5 +3,5 @@ app "test" provides [main] to "./platform"
walkHelp : {} -> [Continue {}, Break []] walkHelp : {} -> [Continue {}, Break []]
main = when walkHelp {} is main = when walkHelp {} is
# ^^^^^^^^^^^ [Break [], Continue {}] # ^^^^^^^^^^^ [Break []w_a, Continue {}]
Continue {} -> {} Continue {} -> {}