ok kinda works?
This commit is contained in:
parent
4ff88c0ca9
commit
9b897194ca
2 changed files with 11 additions and 8 deletions
|
@ -203,26 +203,25 @@ pub fn synthesize(ctx: &Context, term: &Term) -> Result<(Type, Context)> {
|
|||
let ex_b_2 = ex_b.transform_with_visitor(&V(1, aug_ctx.size()))?;
|
||||
let e_2 = e.transform_with_visitor(&V(0, aug_ctx.size()))?;
|
||||
|
||||
println!("---");
|
||||
let wtf_ctx = typecheck(&aug_ctx, &e_2, &ex_b_2)?;
|
||||
|
||||
let (before_marker, after_marker) = wtf_ctx.split_at(&marker_idx);
|
||||
|
||||
// Bump the levels down since we're splitting teh array
|
||||
struct V2(usize);
|
||||
struct V2(usize, usize);
|
||||
impl Visitor for V2 {
|
||||
fn visit_index(&self, index: &mut ContextIndex) -> Result<()> {
|
||||
index.debruijn_level -= 1;
|
||||
index.debruijn_index = self.0 - 1 - index.debruijn_level;
|
||||
index.debruijn_level -= self.0;
|
||||
index.debruijn_index = self.1 - 1 - index.debruijn_level;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
let after_marker =
|
||||
after_marker.transform_with_visitor(&V2(after_marker.size()))?;
|
||||
after_marker.transform_with_visitor(&V2(0, after_marker.size()))?;
|
||||
|
||||
let tau = Type::Arrow(Box::new(ex_a_2), Box::new(ex_b));
|
||||
println!("pre-tau: {tau:?} (in {after_marker:?})");
|
||||
let tau = app_ctx(&after_marker, &tau)?;
|
||||
let tau = tau.transform_with_visitor(&V2(1, after_marker.size()))?;
|
||||
|
||||
// let (final_ctx, gen_idx) =
|
||||
// before_marker.add(ContextEntry::ExistentialVar);
|
||||
|
|
|
@ -232,7 +232,11 @@ impl Type {
|
|||
Type::Existential(index)
|
||||
}
|
||||
Type::Polytype(_) => todo!(),
|
||||
Type::Arrow(_, _) => todo!(),
|
||||
Type::Arrow(a, b) => {
|
||||
let a = a.transform_with_visitor(visitor)?;
|
||||
let b = b.transform_with_visitor(visitor)?;
|
||||
Type::Arrow(Box::new(a), Box::new(b))
|
||||
}
|
||||
_ => ty,
|
||||
};
|
||||
visitor.visit_type_after(&mut ty)?;
|
||||
|
@ -348,7 +352,7 @@ pub struct Context {
|
|||
|
||||
impl fmt::Debug for Context {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "ᴦ{:?}", self.vector)
|
||||
write!(f, "Γ{:?}", self.vector)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue