
Am Samstag 17 April 2010 19:14:02 schrieb Limestraƫl:
Hello,
Well, here comes the trouble: GameStructs.hs:16:9: Functional dependencies conflict between instance declarations: instance (Binary a) => Binarizable a a -- Defined at MagBots/GameStructs.hs:16:9-37 instance Binarizable GameObject String -- Defined at MagBots/GameStructs.hs:38:9-37
GameStructs.hs:19:9: Functional dependencies conflict between instance declarations: instance (Binary a, Monad m) => Unbinarizable a a m -- Defined at MagBots/GameStructs.hs:19:9-50 instance (MonadReader [GameObject] m) => Unbinarizable GameObject String m -- Defined at MagBots/GameStructs.hs:41:9-73
I don't see why the functional dependencies conflict, since GameObject is not an instance of Binary...
Somebody somewhere might write such an instance. But more fundamentally: GHC doesn't look at the constraints for instance selection, so your instance in line 16 looks like instance Binarizable a a where ..., oh, and by the way, a must be an instance of Binary, otherwise please refuse to compile to the compiler. The FunDep then says in each instance (and you'd need at least OverlappingInstances to declare more) a and b are the same type. instance Binarizable GameObject String violates that FunDep. (Analogous for Unbinarizable.) I think removing the instance Binary a => ... and declaring an instance for the types you need manually is the easiest solution.