trait vec_monad { fn bind(f: fn(A) -> ~[B]); } impl ~[A]: vec_monad { fn bind(f: fn(A) -> ~[B]) { let mut r = fail; for self.each |elt| { r += f(*elt); } //~^ WARNING unreachable expression //~^^ ERROR the type of this value must be known } } fn main() { ["hi"].bind({|x| [x] }); //~ ERROR type `[&static/str]/1` does not implement any method in scope named `bind` }