[Haskell-cafe] Re: GATD and pattern matching

Dupont Corentin corentin.dupont at gmail.com
Thu Jun 10 16:01:38 EDT 2010


Hello Maciej,
i tried this out, but it didn't worked.

Daniel,
I added a (Show a) constraint to Equal:

> data Obs a where
>     Player :: Obs Integer
>     Turn :: Obs Integer
>     Official :: Obs Bool
>     Equ :: (Show a, Eq a) => Obs a -> Obs a -> Obs Bool
--woops!!
>     Plus :: (Num a) => Obs a -> Obs a -> Obs a
>     Time :: (Num a) => Obs a -> Obs a -> Obs a
>     Minus :: (Num a) => Obs a -> Obs a -> Obs a
>     Konst :: a -> Obs a
>     And :: Obs Bool -> Obs Bool -> Obs Bool
>     Or :: Obs Bool -> Obs Bool -> Obs Bool


It works for the Show instance, but not Eq.
By the way, shouldn't the Show constraint be on the instance and not on the
datatype declaration?
I'd prefer to keep the datatype as generic as possible...

There is really no way to make my Obs datatype an instance of Eq and Show??

I searched around a way to add type information on the pattern match like:

> instance Show t => Show (Obs t) where
>     show (Equal (a::Obs t) (b::Obs t)) = (show a) ++ " Equal " ++ (show b)
>     show (Plus a b) = (show a) ++ " Plus " ++ (show b)


But it doesn't work.

thanks for your help,
Corentin



On Thu, Jun 10, 2010 at 2:47 AM, Maciej Piechotka <uzytkownik2 at gmail.com>wrote:

> On Wed, 2010-06-09 at 22:28 +0200, Dupont Corentin wrote:
> > Thanks for your response.
> >
> > How would you do it? I design this GATD for a game i'm making:
> >
> > > data Obs a where
> > >     Player :: Obs Integer
> > >     Turn :: Obs Integer
> > >     Official :: Obs Bool
> > >     Equ :: Obs a -> Obs a -> Obs Bool               --woops!!
> > >     Plus :: (Num a) => Obs a -> Obs a -> Obs a
> > >     Time :: (Num a) => Obs a -> Obs a -> Obs a
> > >     Minus :: (Num a) => Obs a -> Obs a -> Obs a
> > >     Konst :: a -> Obs a
>
> Actually woops is here. Make it for example
>
>    Const :: (Show a, Eq a, ...) => a -> Obs a
>
> > >     And :: Obs Bool -> Obs Bool -> Obs Bool
> > >     Or :: Obs Bool -> Obs Bool -> Obs Bool
> >
> > For example I can design an Observable like that:
> >
> > myObs = Player `Equ` (Konst 1) `And` Official
> >
> > These Observables will then be processed during gameplay.
> >
> > I would like to be able to do in ghci:
> >
> > > show myObs
> > Player `Equ` (Konst 1) `And` Official
> >
> > and:
> > >  myObs == myObs
> > True
> >
>
> Regards
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100610/8cda153b/attachment.html


More information about the Haskell-Cafe mailing list