<br><br><div class="gmail_quote">On Wed, Jul 2, 2008 at 11:52 AM, Daniel Fischer &lt;<a href="mailto:daniel.is.fischer@web.de">daniel.is.fischer@web.de</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>Perhaps<br>
<br>
class (Ix i) =&gt; UArrClass i e where ...<br>
<br>
would work?<br>
<div><div></div><div class="Wj3C7c"><br>
</div></div></blockquote></div><br>class Ix i =&gt; UArrClass i e where<br>&nbsp; data UArr i e<br>&nbsp; unsafeAt_ :: UArr i e -&gt; Int -&gt; e<br><br>instance <br>&nbsp;&nbsp;&nbsp; ( IArray UArray e&nbsp; <br>&nbsp;&nbsp;&nbsp; , IArray UArray f&nbsp; <br>&nbsp;&nbsp;&nbsp; , Ix i<br>
&nbsp;&nbsp;&nbsp; ) =&gt; UArrClass i (e,f) <br>&nbsp; where<br>&nbsp;&nbsp;&nbsp; newtype UArr i (e,f) = UArrPair (UArray i e) (UArray i f)<br>&nbsp;&nbsp;&nbsp; unsafeAt_ (UArrPair ea fa) i = (unsafeAt ea i , unsafeAt fa i)<br><br>instance <br>&nbsp;&nbsp;&nbsp; ( IArray UArray e <br>
&nbsp;&nbsp;&nbsp; , IArray UArray f <br>&nbsp;&nbsp;&nbsp; , UArrClass i (e,f)<br>&nbsp;&nbsp;&nbsp; , Ix i<br>&nbsp;&nbsp;&nbsp; ) =&gt; IArray UArr (e,f) <br>&nbsp; where<br>&nbsp;&nbsp;&nbsp; unsafeAt = unsafeAt_ <br><br>test1 :: UArr Int (Int,Int) -&gt; (Int,Int)<br>test1 a = unsafeAt a 5&nbsp;&nbsp; --this is line 77<br>
<br>--------------------<br>Array.hs:77:10:<br>&nbsp;&nbsp;&nbsp; Ambiguous type variable `i&#39; in the constraint:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `Ix i&#39; arising from a use of `unsafeAt&#39; at Array.hs:77:10-21<br>&nbsp;&nbsp;&nbsp; Probable fix: add a type signature that fixes these type variable(s)<br>
<br>I think the &#39;i&#39; there is the one from the method context of IArray,<br><br>class IArray a e where<br>&nbsp;&nbsp; unsafeAt :: Ix i =&gt; a i e -&gt; Int -&gt; e<br><br>But that &#39;i&#39; does not escape to the class context, so I have no way to address it. I think I need to leave it free, but I can&#39;t do that with my associated type.<br>
<br>Scott<br>