On Thu, May 29, 2008 at 7:36 PM, Antoine Latter &lt;<a href="mailto:aslatter@gmail.com">aslatter@gmail.com</a>&gt; wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I&#39;ve tried similar things before. &nbsp;You may run into subtle problems later.<br>
<br>
Such as:<br>
<br>
&gt; transpose :: Matrix -&gt; Matrix<br>
<br>
won&#39;t expand into the type signature you want it to, I think.<br>
<br>
You probably want that to be equivalent to:<br>
<br>
transpose :: &nbsp;forall m. forall a. forall i. forall n. (Ix i, MArray a<br>
n m, Num i, Num n) =&gt; m (a (i,i) n) -&gt; m (a (i,i) n)<br>
<br>
But you&#39;ll get:<br>
<br>
transpose :: &nbsp;forall m. forall a. forall i. forall n. (Ix i, MArray a<br>
n m, Num i, Num n) =&gt; Matrix -&gt; m (a (i,i) n)<br>
<br>
which means that the first argument must be a polymorphic value, which<br>
isn&#39;t very useful.<br>
<br>
</blockquote></div><br>Right, this is exactly what I&#39;m getting when creating a transpose function:<br><br>&nbsp;&nbsp;&nbsp; *Main&gt; :t transpose<br>&nbsp;&nbsp;&nbsp; transpose :: (MArray a Double m) =&gt; Matrix Int Double -&gt; m (a (Int, Int) Double)<br>
<br>Thanks for sharing your experience. I&#39;ll try to stay out of the subtle bugs and keep it verbose but simple.<br><br>Regards,<br><br>Olivier.<br>