Tillmann Rendel wrote:
david48 wrote:
class Gadget g where
fInit :: g -> a -> g
Tillman's two suggestions (below) are probably your answer.
Just to say what everyone else has said in a bunch of different ways:
your class says that for ANY Gadget, fInit will work with ANY OTHER type a.
This doesn't seem to be what you want. There are three things you might
want:
1. Maybe you want a to always be String. Easy. fInit :: g -> String -> g
2. Maybe you want lots of possible different "a"s for each "g". Then you
make "a" a parameter of the class too.
3. Maybe you want just one particular "a" for each "g". I.e. "g"
determines "a". Then you can proceed as for (2), but add the functional
dependency | g -> a
These types are incompatible, your fInit implementation should be able
to work with whatever type a the caller has choosen to provide. Maybe
you should try one of
class Gadget g where
fInit :: g -> String -> g
or
class Gadget g a where
fInit :: g -> a -> g
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe