---
# System prepended metadata

title: 2022-05-22 meeting

---

# 2022-05-22 meeting

Previously decided to layout a plan to be able to model a test: [#25680](https://github.com/rust-lang/rust/issues/25680)

There are docs for setting up `a-mir-formality`

[available here](https://nikomatsakis.github.io/a-mir-formality/docs/setup)
* Should include hack for Magic Racket:
* 

[from here](https://github.com/rust-lang/rust/blob/master/src/test/ui/generic-associated-types/extended/lending_iterator_2.rs):

```rust
pub trait FromLendingIterator<A>: Sized {
    fn from_iter<T: for<'x> LendingIterator<Item<'x> = A>>(iter: T) -> Self;
}

impl<A> FromLendingIterator<A> for Vec<A> {
    fn from_iter<I: for<'x> LendingIterator<Item<'x> = A>>(mut iter: I) -> Self {
        //[base]~^ impl has stricter
        let mut v = vec![];
        while let Some(item) = iter.next() {
            v.push(item);
        }
        v
    }
}

pub trait LendingIterator {
    type Item<'a>
    where
        Self: 'a;
    fn next(&mut self) -> Option<Self::Item<'_>>;
}

fn main() {}
```

* things we need for this example:
    * lowering from "user types" to "internal types"
        * need rust surface types that get lowered to internal types
    * well-formedness check:
        * check that the traits are well-formed
        * check that the impl is well-formed
            * check that the impl signatures match the trait
    * coherence check:
        * not a good example because there is only one impl
    * type check of the (default) function:
        * convert the MIR into goals
        * do the type check
    * 