#77's proposed trait implementation looked like

```rust
impl |int, int| -> int for Foo {
    fn call(&mut self, a: int, b: int) -> int { ... }
}
```

It wasn't clearly stated, but the idea here is that this is effectively sugar for a trait like `FnMut2<int, int, int>`.

The implication here is that the function calling traits are actually a family of traits synthesized by the compiler (one for each argument count), rather than 3 specific lang item traits defined in libcore.

Despite being very unconventional, this approach allows for omitting the tupling, and would not prevent passing DSTs by value.

Has this approach been seriously considered and rejected?