To read elements from Arraytypes in Haskell, you use the operator (!), as in:
Prelude Data.Array> let v = listArray (0,9) [1..10]
Prelude Data.Array> v ! 3
4
So, now you only need to walk around the index space, rows and columns. I like the understanding of lists for this kind of task:
assocs' x y arr = [ ((i,j), arr ! (i,j))
| i <- [0..x-1]
, j <- [0..y-1]
]
which is only a specialized version Data.Array.assocs:
assocs :: Ix i => Array i e -> [(i, e)]
. , assocs, , .