Hello Maciej,<br>i tried this out, but it didn't worked.<br><br>Daniel,<br>I added a (Show a) constraint to Equal:<br><br>> data Obs a where
<br>> Player :: Obs Integer
<br>> Turn :: Obs Integer<br>> Official :: Obs Bool
<br>> Equ :: (Show a, Eq a) => Obs a -> Obs a -> Obs Bool --woops!!<br><div class="im">> Plus :: (Num a) => Obs a -> Obs a -> Obs a
<br></div>> Time :: (Num a) => Obs a -> Obs a -> Obs a
<br>> Minus :: (Num a) => Obs a -> Obs a -> Obs a
<br>> Konst :: a -> Obs a
<br>> And :: Obs Bool -> Obs Bool -> Obs Bool
<br>> Or :: Obs Bool -> Obs Bool -> Obs Bool<br><br><br>It works for the Show instance, but not Eq.<br>By the way, shouldn't the Show constraint be on the instance and not on the datatype declaration?<br>
I'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>> instance Show t => Show (Obs t) where<br>> show (Equal (a::Obs t) (b::Obs t)) = (show a) ++ " Equal " ++ (show b)<br>> show (Plus a b) = (show a) ++ " Plus " ++ (show b)<br><br>
<br>But it doesn'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"><<a href="mailto:uzytkownik2@gmail.com">uzytkownik2@gmail.com</a>></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>
> Thanks for your response.<br>
><br>
> How would you do it? I design this GATD for a game i'm making:<br>
><br>
> > data Obs a where<br>
> > Player :: Obs Integer<br>
> > Turn :: Obs Integer<br>
> > Official :: Obs Bool<br>
> > Equ :: Obs a -> Obs a -> Obs Bool --woops!!<br>
> > Plus :: (Num a) => Obs a -> Obs a -> Obs a<br>
> > Time :: (Num a) => Obs a -> Obs a -> Obs a<br>
> > Minus :: (Num a) => Obs a -> Obs a -> Obs a<br>
> > Konst :: a -> Obs a<br>
<br>
</div>Actually woops is here. Make it for example<br>
<br>
Const :: (Show a, Eq a, ...) => a -> Obs a<br>
<div class="im"><br>
> > And :: Obs Bool -> Obs Bool -> Obs Bool<br>
> > Or :: Obs Bool -> Obs Bool -> Obs Bool<br>
><br>
> For example I can design an Observable like that:<br>
><br>
> myObs = Player `Equ` (Konst 1) `And` Official<br>
><br>
> These Observables will then be processed during gameplay.<br>
><br>
> I would like to be able to do in ghci:<br>
><br>
> > show myObs<br>
> Player `Equ` (Konst 1) `And` Official<br>
><br>
> and:<br>
> > myObs == myObs<br>
> True<br>
><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>