Question: **i used devexpress component**

i set data for **ItemSource** property of **GridControl** in code behhind like this :

```
grid.ItemsSource = query ;

```

query is List

when i filtered or searched in gridcontrol , display rows changed
now i want to get the changed itemsource like this : 

```
DataSource = ((IEnumerable)grid.ItemsSource).ToList();

```

How Can I do it ?

thanks

Answer: 
In more general terms, the difference is that `mapM_` only needs to ["consume"](http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Foldable.html#t:Foldable) all elements of the input, whereas `mapM` also needs to "re-build" the data structure, with new values. That's pretty much trivial for lists: you only need to [traverse](http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Traversable.html) along the cons-cells, updating values with those received from the action you map. But it doesn't work that easily for containers whose structure depends on the actual contained values. So e.g. for `Data.Set` you can't define the equivalent of `mapM` with type `(a -> m b) -> Set a -> m (Set b)` – it is an instance of [`Foldable`](http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Foldable.html#t:Foldable), but not of [`Traversable`](http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Traversable.html#t:Traversable)
mapM\_ ignores the result. This means, that no return value will be returned. You can see this in interactive mode:

```
Prelude> mapM (putStrLn . show) [1,2]
1
2
[(),()]
Prelude> mapM_ (putStrLn . show) [1,2]
1
2

```