
Hi, I got an issue when playing haskell's type system, partically parametic class/instance have no way to specify constrains of their parameters. for example, i want to data struct to chain functions and their derivatives so we can have combined function and derivations, as following import qualified Control.Category as Cat data ChainableFunction a b = CF { cfF :: (a->b), cfDeriv :: (a->b) } class Module a b wher4e (*>) :: a -> b -> b instance Cat.Category CF where id :: (Num a) -- GHC dis-allow this id = CF id (const 1) (.) :: (Num a, Num b, Num c, Module a b, Module b c) => CF a b -> CF b c -> CF a c -- GHC disallow this either (.) (CF f f') (CF g g') = CF (g.f) (\a -> f' a *> g' (f a)) However GHC only has kinds for class/instance like (*->*->*) so we are forced to allow all possible types in instance code. I'm not sure if I'm modelling things correctly or is there another way to do the same thing? Cheers, Louis