[Haskell-cafe] no dynamic binding

Abraham Egnor abe.egnor at gmail.com
Sun Sep 19 14:46:12 EDT 2004


You can use exisential types to do what you'd like.  From memory, so
there are probably errors:

newtype ServerCommand = forall a. ServerCommandClass a => ServerCommand a

instance ServerCommandClass ServerCommand where
        toString (ServerCommand c) = toString c

commands :: [ServerCommand]
commands = [ServerCommand $ DashCommand ..., ServerCommand $ MoveCommand ...]

Also, for a less type-safe approach, see Data.Dynamic.



On Sun, 19 Sep 2004 13:48:53 -0400, Andrew Harris <andrew.unit at gmail.com> 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
>


More information about the Haskell-Cafe mailing list