diff options
| -rw-r--r-- | src/checker.rs | 1 | ||||
| -rw-r--r-- | src/checker_signature.rs | 25 |
2 files changed, 10 insertions, 16 deletions
diff --git a/src/checker.rs b/src/checker.rs index c381ba4..2474bab 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -16,6 +16,7 @@ impl CheckerState { let Programme(decls) = prog; for decl in decls { + debug!(%decl); self.reset_binders(); match decl { Decl::Set { name, set } => { diff --git a/src/checker_signature.rs b/src/checker_signature.rs index 0145e82..cc6cadc 100644 --- a/src/checker_signature.rs +++ b/src/checker_signature.rs @@ -371,9 +371,15 @@ impl CheckerState { // deal with left-nesting let mut ctx = self.clone(); - for Param { name, set } in inst_params { - ctx.make_element_binding(name.clone(), set.clone())?; - } + let inst_params: Vec<Param> = inst_params + .iter() + .map(|Param { name, set }| { + let set = ctx.check_set(set)?; + let canon = ctx.make_element_binding(name.clone(), set.clone())?; + Ok(Param { name: canon, set }) + }) + .collect::<Result<_, _>>()?; + let body = ctx.check_instance(body, None)?; let (inst_params, body) = if let Instance::For { params: inner_params, @@ -467,19 +473,6 @@ impl CheckerState { params: inst_params, }) } else { - let mut ctx = self.clone(); - let inst_params = inst_params - .iter() - .map(|Param { name, set }| { - let set = ctx.check_set(set)?; - let canon = ctx.make_element_binding(name.clone(), set.clone())?; - Ok(Param { - name: canon, - set: set, - }) - }) - .collect::<Result<Vec<_>, _>>()?; - let body = ctx.check_instance(&body, None)?; Ok(Instance::For { params: inst_params, body: Box::new(body), |
