[Haskell-beginners] Equivalence of Inheritance

Russ Abbott russ.abbott at gmail.com
Tue Dec 14 22:06:37 CET 2010


That's good. (It's more or less the way I was doing it.)  What I wanted to
avoid was this.

getGenderSpecificCondition (  Man _ _ cond) = cond
getGenderSpecificCondition (Woman _ _ cond) = cond


I know it seems like a small thing, but I would like to be able to write it
like this.

getGenderSpecificCondition p
   | p == (Man _ _ cond) = cond
   | p == (Woman _ _ cond) = cond

But that's not legal syntax.  A pattern can't appear in that context. But
this does the job.

getGenderSpecificCondition :: Person -> Condition
getGenderSpecificCondition p
   | isMan p = prostateCondition p
   | isWoman p = ovaryCondition p

isMan (     Man _ _ cond) = True
isMan _ = False
isWoman (Woman _ _ cond) = True
isWoman _ = False

That works! prostateCondition and ovaryCondition are both defined on Person.
(I'm surprised to see that.)

*Person> Group [Man "Harry" 32 OK, Woman "Sally" 29 Good]
Harry(32, OK)
Sally(29, Good)

Also


*Person> prostateCondition (Woman "Sally" 29 Good)
*** Exception: No match in record selector prostateCondition
*Person> prostateCondition (Man "Harry" 29 Good)
Good


*-- Russ *
*
*


On Tue, Dec 14, 2010 at 12:31 PM, Michael Katelman <katelman at uiuc.edu>wrote:

> Perhaps this?
>
> https://gist.github.com/741048
>
> -Mike
>
> On Tue, Dec 14, 2010 at 2:27 PM, Russ Abbott <russ.abbott at gmail.com>
> wrote:
> > What I'm after is a version of my example that compiles.  Can you make
> one?
> >
> > -- Russ
> >
> >
> > On Tue, Dec 14, 2010 at 12:18 PM, Antoine Latter <aslatter at gmail.com>
> wrote:
> >>
> >> Sorry, I really don't know enough about what you're after to attempt
> that.
> >>
> >> But you'll need to change you're signatures of the form:
> >>
> >> > function :: Person -> Foo
> >>
> >> to something of the form:
> >>
> >> > function :: Person p => p -> Foo
> >>
> >> Because again, a type class can not be used as a type.
> >>
> >> Antoine
> >>
> >> On Tue, Dec 14, 2010 at 2:12 PM, Russ Abbott <russ.abbott at gmail.com>
> >> wrote:
> >> > What got fouled up is all the adjustments I had to make to the other
> >> > declarations.
> >> > Can you complete the example so that it compiles using
> >> >
> >> > class Person p where ...
> >> >
> >> > I'd very much like to see an example that actually compiles.
> >> >
> >> > Thanks.
> >> > -- Russ
> >> >
> >> > On Tue, Dec 14, 2010 at 11:58 AM, Antoine Latter <aslatter at gmail.com>
> >> > wrote:
> >> >>
> >> >> On Tue, Dec 14, 2010 at 1:52 PM, Russ Abbott <russ.abbott at gmail.com>
> >> >> wrote:
> >> >> > If gender is a field in a Person type, then a Person must have both
> >> >> > an
> >> >> > ovaryCondition and a prostateCondition.  That seems awkward.
> >> >> > Regarding
> >> >> >      class Person p where
> >> >> > I started down that path but got completely fouled up.
> >> >>
> >> >> How did this get fouled up? Every class declaration must take
> >> >> arguments - here, 'p' is the argument for the class.
> >> >>
> >> >> Thanks,
> >> >> Antoine
> >> >
> >> >
> >
> >
> > _______________________________________________
> > Beginners mailing list
> > Beginners at haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20101214/f6061f52/attachment-0001.htm>


More information about the Beginners mailing list