[Haskell-cafe] Type constrain in instance?
Louis Zhuang
louis.zhuang at acm.org
Fri Apr 9 11:22:09 EDT 2010
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
More information about the Haskell-Cafe
mailing list