// ignore-fast
trait vec_monad<A> {
- fn bind<B>(&self, f: |&A| -> ~[B]) -> ~[B];
+ fn bind<B>(&self, f: |&A| -> Vec<B> ) -> Vec<B> ;
}
-impl<A> vec_monad<A> for ~[A] {
- fn bind<B>(&self, f: |&A| -> ~[B]) -> ~[B] {
- let mut r = ~[];
+impl<A> vec_monad<A> for Vec<A> {
+ fn bind<B>(&self, f: |&A| -> Vec<B> ) -> Vec<B> {
+ let mut r = Vec::new();
for elt in self.iter() {
r.push_all_move(f(elt));
}
pub fn main() {
assert_eq!(transform(Some(10)), Some(~"11"));
assert_eq!(transform(None), None);
- assert!((~[~"hi"])
- .bind(|x| ~[x.clone(), *x + "!"] )
- .bind(|x| ~[x.clone(), *x + "?"] ) ==
- ~[~"hi", ~"hi?", ~"hi!", ~"hi!?"]);
+ assert!((vec!(~"hi"))
+ .bind(|x| vec!(x.clone(), *x + "!") )
+ .bind(|x| vec!(x.clone(), *x + "?") ) ==
+ vec!(~"hi", ~"hi?", ~"hi!", ~"hi!?"));
}