On Wed, Jul 14, 2010 at 8:25 AM, Arnaud Bailly <arnaud.oq...@gmail.com> wrote: > Hello, > I would like to construct a collection of function-like objects on > which I could apply some value, in a typesafe and clean way.
You could use Data.Typeable.cast [1] [1] http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Data-Typeable.html#v%3Acast > Let's say I have something like this: > >> data Fun = forall a b . F (a -> b) >> type Callables = Map String Fun Sorry, but using GADT syntax: data Fun where F :: (Typeable a, Typeable b) => (a -> b) -> Fun > I would like to be able to write: > >> invoke :: Callables -> a -> String -> b >> invoke m d k = case lookup k m of >> Just (F f) -> f d >> Nothing -> error $ "unable to find function for key " ++ k Untested: invoke :: (Typeable a, Typeable b) => Callables -> a -> String -> Maybe b invoke m d k = do F f <- lookup k m arg <- cast d cast (f arg) HTH! -- Felipe. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe