Skip to content

Commit

Permalink
Merge pull request #7285 from faldor20/purity-inference-module-params…
Browse files Browse the repository at this point in the history
…-fixes

Purity inference module params fixes
  • Loading branch information
faldor20 authored Dec 1, 2024
2 parents 8b9f122 + f3f2625 commit 21b555d
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
14 changes: 14 additions & 0 deletions crates/cli/tests/cli_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1434,6 +1434,20 @@ mod cli_tests {
.run()
.assert_clean_success();
}

#[test]
fn module_params_effectful_param() {
let cli_check = ExecCli::new(
CMD_CHECK,
file_from_root(
"crates/cli/tests/test-projects/module_params",
"effect_module.roc",
),
);

let cli_check_out = cli_check.run();
cli_check_out.assert_clean_success();
}
}

#[cfg(feature = "wasm32-cli-run")]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module { stdout! } -> [log!]

log! = \msg, level -> stdout! "$(level):$(msg)"
6 changes: 3 additions & 3 deletions crates/compiler/load_internal/src/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2269,18 +2269,18 @@ fn update<'a>(
state.fx_mode = FxMode::PurityInference;
}
}
Builtin { .. } | Module { .. } => {
Builtin { .. } => {
if header.is_root_module {
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
state.platform_path = PlatformPath::RootIsModule;
}
}
Hosted { exposes, .. } => {
Hosted { exposes, .. } | Module { exposes, .. } => {
if header.is_root_module {
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
state.platform_path = PlatformPath::RootIsHosted;
}

// WARNING: This will be bypassed if we export a record of effectful functions. This is a temporary hacky method
if exposes
.iter()
.any(|exposed| exposed.value.is_effectful_fn())
Expand Down
11 changes: 11 additions & 0 deletions crates/compiler/unify/src/unify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3345,6 +3345,17 @@ fn unify_flat_type<M: MetaCollector>(

outcome
}
(Func(args, closure, ret, fx), EffectfulFunc) => {
let mut outcome = unify_pool(env, pool, *fx, Variable::EFFECTFUL, ctx.mode);

outcome.union(merge(
env,
ctx,
Structure(Func(*args, *closure, *ret, Variable::EFFECTFUL)),
));

outcome
}
(FunctionOrTagUnion(tag_names, tag_symbols, ext), Func(args, closure, ret, fx)) => {
unify_function_or_tag_union_and_func(
env,
Expand Down

0 comments on commit 21b555d

Please sign in to comment.