I think others have provided the immediate answers to your question, so
I'll skip that.
But, standing back, you seem to have fallen prey to a misunderstanding I
made when learning Haskell, thinking that a "class" is directly analogous
to a class in OO languages. While there are similarities, the Haskell
notion of a class is much more restrictive, as you have found.
I wrote a few more notes here:
http://www.ninebynine.org/Software/Learning-Haskell-Notes.html#type-class-misuse
#g
--
At 13:48 19/09/04 -0400, Andrew Harris wrote:
>Hi -
>> I have another question. I am still working on a soccer server and
>thought it would be neat to create command objects that had a
>"toString" method. Then, I was going to keep a list of these command
>objects and at the right time stringify them and send them to the
>server. So I created a class with a toString method:
>>class ServerCommandClass a where
> toString :: a -> String
>>And then a few instances:
>>-- dash command
>data DashCommand =
> DashCommand { dashpower :: Double }
>>instance ServerCommandClass DashCommand where
> toString c = "(dash " ++ show (dashpower c) ++ ")\n"
>>-- move command
>data MoveCommand =
> MoveCommand { x :: Double,
> y :: Double }
>>instance ServerCommandClass MoveCommand where
> toString c = "(move " ++ show (x c) ++ " " ++ show (y c) ++ ")\n"
>> The problem is, I am not quite sure how to describe a *list* of
>command objects where the list could have both DashCommands and
>MoveCommands in it. Ideally the list could contain both, and then for
>each item in the list I could call the toString method.
>> I was reading Simon Thompson's Haskell: The Craft of Functional
>Programming and I read that Haskell 98 does not support dynamic
>binding, which (it seems) is what I'm trying to do. Does anyone have
>a suggestion on an alternative approach?
>>thanks,
>-andrew
>_______________________________________________
>Haskell-Cafe mailing list
>Haskell-Cafe at haskell.org>http://www.haskell.org/mailman/listinfo/haskell-cafe
------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact