[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