
Now that this is straightened out, I went back to what I was doing in the
first place and realized that I haven't solved my problem.
Given
data Person =
Man {name :: String, age :: Int, prostateCondition :: Condition}
| Woman {name :: String, age :: Int, ovaryCondition :: Condition}
I'd like to define something like this.
type MensGroup = [Man]
Is there a way to do something like that?
*
-- Russ *
*
*
On Tue, Dec 14, 2010 at 1:06 PM, Russ Abbott
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
wrote: Perhaps this?
https://gist.github.com/741048
-Mike
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
wrote: Sorry, I really don't know enough about what you're after to attempt
On Tue, Dec 14, 2010 at 2:27 PM, Russ Abbott
wrote: 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
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
wrote:
On Tue, Dec 14, 2010 at 1:52 PM, Russ Abbott
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@haskell.org http://www.haskell.org/mailman/listinfo/beginners