Hi, I am new to rust I need help understanding the iterator3.rs code in rustlang exercise.

```
#[test]
fn result_with_list() {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x: Result<Vec<i32>, DivisionError> = division_results.collect();
assert_eq!(format!("{:?}", x), "Ok([1, 11, 1426, 3])");
}
#[test]
fn list_of_results() {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x: Vec<Result<i32, DivisionError>>= division_results.collect();
assert_eq!(format!("{:?}", x), "[Ok(1), Ok(11), Ok(1426), Ok(3)]");
}
```

How does the collect function turn the Result into [Ok(1), Ok(11), Ok(1426), Ok(3)] or Ok([1, 11, 1426, 3])? In haskell you have special functions to turn the Monads inside out. I don't understand how it works here.

For example

let x: Result<Vec, DivisionError> = division_results.collect();

and this line

let x: Vec<Result<i32, DivisionError>>= division_results.collect();

both return different result