[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