From dfa5710932293003aadcdce9bc161d40264a28bb Mon Sep 17 00:00:00 2001 From: Folkert Date: Mon, 21 Mar 2022 20:18:18 +0100 Subject: [PATCH] optimize variable substitution in instantiate_rigids --- compiler/constrain/src/expr.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/constrain/src/expr.rs b/compiler/constrain/src/expr.rs index f467f6fae5..f093113971 100644 --- a/compiler/constrain/src/expr.rs +++ b/compiler/constrain/src/expr.rs @@ -10,7 +10,7 @@ use roc_can::expected::PExpected; use roc_can::expr::Expr::{self, *}; use roc_can::expr::{AccessorData, ClosureData, Field, WhenBranch}; use roc_can::pattern::Pattern; -use roc_collections::all::{HumanIndex, ImMap, MutMap, SendMap}; +use roc_collections::all::{HumanIndex, MutMap, SendMap}; use roc_module::ident::{Lowercase, TagName}; use roc_module::symbol::{ModuleId, Symbol}; use roc_region::all::{Loc, Region}; @@ -1670,14 +1670,14 @@ fn instantiate_rigids( let mut annotation = annotation.clone(); let mut new_rigid_variables: Vec = Vec::new(); - let mut rigid_substitution: ImMap = ImMap::default(); + let mut rigid_substitution: MutMap = MutMap::default(); for named in introduced_vars.named.iter() { use std::collections::hash_map::Entry::*; match ftv.entry(named.name.clone()) { Occupied(occupied) => { let existing_rigid = occupied.get(); - rigid_substitution.insert(named.variable, Type::Variable(*existing_rigid)); + rigid_substitution.insert(named.variable, *existing_rigid); } Vacant(vacant) => { // It's possible to use this rigid in nested defs @@ -1698,7 +1698,7 @@ fn instantiate_rigids( // Instantiate rigid variables if !rigid_substitution.is_empty() { - annotation.substitute(&rigid_substitution); + annotation.substitute_variables(&rigid_substitution); } // TODO investigate when we can skip this. It seems to only be required for correctness