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