<div dir="ltr"><div><div>The problem isn't with array, but rather your index.  Ix instances are always sorted in ascending order, as you might imagine.  You can however, use your own index in arrays and they can be indexed in whatever order you like.<br><br><br></div><div>{-# LANGUAGE GeneralizedNewtypeDeriving #-}<br><br>import Data.Array<br>import Data.Ix<br><br>newtype MyIx = MyIx Int deriving (Eq, Num, Show)<br><br>instance Ord MyIx where<br>  compare (MyIx a) (MyIx b) =<br>    case compare a b of<br>      LT -> GT<br>      GT -> LT<br>      EQ -> EQ<br><br>instance Ix MyIx where<br>  range (MyIx a, MyIx b) = map MyIx $ reverse [b..a]<br>  index (MyIx a, MyIx b) (MyIx c) = a - c<br>  inRange (MyIx a, MyIx b) (MyIx c) = c <= a && c >= b<br></div><div><br>blah :: Array MyIx Char<br>blah = array (3,0) [(0,'a'),(1,'b'),(2,'c'),(3,'d')]<br><br>Warning:  I only very lightly tested the above code.<br></div><div><br>You can mix your index and normal indexes to get the row / col ordering you are hoping for.<br><br>blah2 :: [((MyIx, Int), Char)] -> Array (MyIx, Int) Char<br>blah2 = array ((3,0),(0,3))<br><br></div>Finally, if you are really looking for something that is designed to be a matrix, you might try one of several libraries that are out there, like hmatrix.<br><br></div>Hopefully this helps.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 23, 2016 at 3:58 AM, Timothy Washington <span dir="ltr"><<a href="mailto:twashing@gmail.com" target="_blank">twashing@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm still trying to get an intuitive understanding of Haskell's <a href="http://hackage.haskell.org/package/array-0.5.1.1/docs/Data-Array.html#g:5" target="_blank">Data.Array</a>, in contrast to Data.List or Data.Vector. <div><br></div><div>I very much want a nested array (a matrix), where the parent list (or rows) are reversed. But neither <b><i>A.array</i></b> nor <b><i>A.istArray</i></b> allow indicies to be reversed in their constructors, nor the list comprehensions that generate the elements </div><div><br></div><div>The only reason I'm using an array, is for the <b>A.//</b> function (operating on a matrix). Otherwise, I'd use <a href="https://hackage.haskell.org/package/vector-0.11.0.0/candidate/docs/Data-Vector.html" target="_blank">Data.Vector</a> which does have a reverse function, but a less powerful <b>V.//</b> , that doesn't accept coordinates in a matrix.<div><br></div><div>Can I reverse a Data.Array? If not, then why. </div><div><br></div><div><br></div><div>Thanks <br clear="all"><div><div data-smartmail="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-family:arial;font-size:small">Tim <br></div><div style="font-family:arial;font-size:small"><br></div></div></div></div></div></div></div></div>
</div></div></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br></div>