I'm trying to get around my problem (still stuck...).
I have really to call a function like this:
triggerEvent :: (Typeable e, Show e, Eq e) => Event e -> EventData e -> State Game ()

This function simply execute an event given the corresponding data and change the state of the game.
Now as explained my web framework won't accept random types (like "e") to be passed around.
So I said to myself "OK, so let's store the events in a list and ask the gui to just give me the number of the event".
So I have an heterogeneous list of events [EventWrap]:

data EventWrap where
    EW :: (Typeable e, Show e, Eq e) => {eventNumber :: Int, event :: Event e} -> EventWrap

Do you think this solution can lead me somewhere?? I have actually doubts I can find back my "Event e" from the list because of the implicit forall in the GADT.....

Thanks,
Corentin


On Wed, Oct 24, 2012 at 3:37 PM, Chris Smith <cdsmith@gmail.com> wrote:

"Corentin Dupont" <corentin.dupont@gmail.com> wrote:
> I could ask my user to make his new type an instance of a class as suggested by Alberto...

If you are working with unknown types, then your options are: (a) constrain to some type class, or (b) have your clients pass in functions to operate on the type alongside the values.  Actually the first is just a special case of the second with syntactic sugar...