<br><br><div class="gmail_quote">On Wed, Nov 11, 2009 at 5:28 PM, Tillmann Vogt <span dir="ltr">&lt;<a href="mailto:Tillmann.Vogt@rwth-aachen.de">Tillmann.Vogt@rwth-aachen.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br>
<br>
I tried to use unboxed arrays for generating an antialiased texture. To make it easier to understand, here is the stripped down code that produces an error:<br>
<br>
&gt;import <a href="http://Control.Monad.ST" target="_blank">Control.Monad.ST</a><br>
&gt;import <a href="http://Data.Array.ST" target="_blank">Data.Array.ST</a><br>
&gt;import Data.Array.Unboxed<br>
&gt;import Data.Word<br>
&gt;type BitMask = UArray Int Word16 -- for determining the grey value of a pixel<br>
&gt;type Pixels = (Int, Int, T)<br>
&gt;data T = N | B BitMask -- this does not work<br>
&gt;-- type T = Int -- this works if int the next line N is replaced by ..lets say 0<br>
&gt;f = newArray (0,10) N :: (ST s (STUArray s Int T))<br>
<br>
<a href="http://hackage.haskell.org/packages/archive/array/0.2.0.0/doc/html/Data-Array-MArray.html#t%3AMArray" target="_blank">http://hackage.haskell.org/packages/archive/array/0.2.0.0/doc/html/Data-Array-MArray.html#t%3AMArray</a><br>

shows that mutable/unboxed arrays only allow simple types:<br>
i.e.  MArray (STUArray s) Int32 (ST s)<br>
<br>
Isn&#39;t this ugly? Imagine this would be the case in C:<br>
<br>
<br>
struct stupidArrayElement{<br>
  int a;<br>
  int b; // not allowed!<br>
}<br>
<br>
stupidArrayElement s[10];<br>
<br>
<br>
Wouldn&#39;t it be nice to have something like: MArray (STUArray s) e (ST s)<br>
with e being a non-recursive data type (like data T = N | B Bitmask).<br>
My understanding of Haskell isn&#39;t deep enough to know if I have overlooked something or if the problem is solvable without a language extension. With a language extension I guess that it is not hard to find out if an abstract data type is non-recursive. Then this type should be serializable automatically.<br>

<br>
What do you think?<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br><div>Actually, there&#39;s a cool package called  storable record. Could it be of some use to you? (Perhaps you <i>might</i> be able to use it if the BitMasks  are of uniform length). Am not 100% sure though.</div>
<div><br></div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
Isn&#39;t this ugly? </blockquote><div>I am not sure if it is really <i>ugly</i>...    and if am allowed to nit-pick, the analogy with C  is not appropriate either. </div><div>Arrays are just different.  (At least thats how I console myself, when am looking for a high performance strict array). Also, on an approximately related issue,</div>
<div> I was suggested to look into data parallel arrays.</div><div><br></div><div><br></div><div><br></div>