Hello Maciej,<br>i tried this out, but it didn&#39;t worked.<br><br>Daniel,<br>I added a (Show a) constraint to Equal:<br><br>&gt; data Obs a where
<br>&gt;     Player :: Obs Integer
<br>&gt;     Turn :: Obs Integer<br>&gt;     Official :: Obs Bool
<br>&gt;     Equ :: (Show a, Eq a) =&gt; Obs a -&gt; Obs a -&gt; Obs Bool               --woops!!<br><div class="im">&gt;     Plus :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a
<br></div>&gt;     Time :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a
<br>&gt;     Minus :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a
<br>&gt;     Konst :: a -&gt; Obs a
<br>&gt;     And :: Obs Bool -&gt; Obs Bool -&gt; Obs Bool
<br>&gt;     Or :: Obs Bool -&gt; Obs Bool -&gt; Obs Bool<br><br><br>It works for the Show instance, but not Eq.<br>By the way, shouldn&#39;t the Show constraint be on the instance and not on the datatype declaration?<br>
I&#39;d prefer to keep the datatype as generic as possible...<br><br>There is really no way to make my Obs datatype an instance of Eq and Show??<br><br>I searched around a way to add type information on the pattern match like:<br>
<br>&gt; instance Show t =&gt; Show (Obs t) where<br>&gt;     show (Equal (a::Obs t) (b::Obs t)) = (show a) ++ &quot; Equal &quot; ++ (show b)<br>&gt;     show (Plus a b) = (show a) ++ &quot; Plus &quot; ++ (show b)<br><br>
<br>But it doesn&#39;t work.<br><br>thanks for your help,<br>Corentin<br><br><br><br><div class="gmail_quote">On Thu, Jun 10, 2010 at 2:47 AM, Maciej Piechotka <span dir="ltr">&lt;<a href="mailto:uzytkownik2@gmail.com">uzytkownik2@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Wed, 2010-06-09 at 22:28 +0200, Dupont Corentin wrote:<br>
&gt; Thanks for your response.<br>
&gt;<br>
&gt; How would you do it? I design this GATD for a game i&#39;m making:<br>
&gt;<br>
&gt; &gt; data Obs a where<br>
&gt; &gt;     Player :: Obs Integer<br>
&gt; &gt;     Turn :: Obs Integer<br>
&gt; &gt;     Official :: Obs Bool<br>
&gt; &gt;     Equ :: Obs a -&gt; Obs a -&gt; Obs Bool               --woops!!<br>
&gt; &gt;     Plus :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a<br>
&gt; &gt;     Time :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a<br>
&gt; &gt;     Minus :: (Num a) =&gt; Obs a -&gt; Obs a -&gt; Obs a<br>
&gt; &gt;     Konst :: a -&gt; Obs a<br>
<br>
</div>Actually woops is here. Make it for example<br>
<br>
    Const :: (Show a, Eq a, ...) =&gt; a -&gt; Obs a<br>
<div class="im"><br>
&gt; &gt;     And :: Obs Bool -&gt; Obs Bool -&gt; Obs Bool<br>
&gt; &gt;     Or :: Obs Bool -&gt; Obs Bool -&gt; Obs Bool<br>
&gt;<br>
&gt; For example I can design an Observable like that:<br>
&gt;<br>
&gt; myObs = Player `Equ` (Konst 1) `And` Official<br>
&gt;<br>
&gt; These Observables will then be processed during gameplay.<br>
&gt;<br>
&gt; I would like to be able to do in ghci:<br>
&gt;<br>
&gt; &gt; show myObs<br>
&gt; Player `Equ` (Konst 1) `And` Official<br>
&gt;<br>
&gt; and:<br>
&gt; &gt;  myObs == myObs<br>
&gt; True<br>
&gt;<br>
<br>
</div>Regards<br>
<br>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
<br></blockquote></div><br>