Hi everyone,<br><br>I&#39;m working on a computational algebra program and I&#39;ve run into a problem.&nbsp; In my program, I have types for instances of algebraic objects, e.g. ZModN for modular integers, and types for the objects themselves, e.g. ZModNTy for the ring of modular integers.<br>
<br>Now, I want to subclass ZModNTy from something like<br><br>class RingTy a b where<br>&nbsp; order :: a -&gt; Integer<br>&nbsp; units :: a -&gt; [b]<br><br>where `a&#39; represents algebraic object, and `b&#39; the type of instances of that object.&nbsp; I want an instance<br>
<br>instance RingTy ZModNTy ZModN where ...<br><br>but then code that only uses order fails with errors like<br><br>&nbsp;&nbsp;&nbsp; No instance for (RingTy ZModNTy b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arising from a use of `order&#39; at Test2.hs:16:8-15<br>
<br>since there is no constraint on the second type variable.<br><br>I think what I really want is<br><br>class RingTy a where<br>&nbsp; order :: a b -&gt; Integer<br>&nbsp; units :: a b -&gt; [b]<br><br>but this doesn&#39;t work either since ZModNTy is not parametric in its type like, say, `Polynomial a&#39; is.<br>
<br>Is this a common problem?&nbsp; Is there a standard way to handle it?<br><br>Thank you for your attention,<br><br>Cotton<br><br>