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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe