[Haskell-cafe] no dynamic binding

Andrew Harris andrew.unit at gmail.com
Sun Sep 19 13:48:53 EDT 2004

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?


More information about the Haskell-Cafe mailing list