Keith Wansbrough wrote:
>
> > Instances.hs:1:
> > Duplicate or overlapping instance declarations
> > for `HasConfig (arcTypeConfig value) (arcTypeParms value)'
> > defined at Instances.hs:19 and defined at Instances.hs:11
> >
> > This is not fair, because while the instances for HasConfig have the
> > potential to conflict in the future, they will only do so should the classes
> > NodeTypeConfigParms and ArcTypeConfigParms overlap.
>
> It is fair. Let's rename your type variables to make what's going on a little
>clearer:
>
> main = return ()
>
> class HasConfig a b where
> ($$) :: a -> b -> b
>
> class NodeTypeConfigParms a b where
> nodeTypeConfig :: a c -> b c -> b c
>
> instance (NodeTypeConfigParms a b) => HasConfig (a c) (b c) where
> ($$) = nodeTypeConfig
>
> class ArcTypeConfigParms a b where
> arcTypeConfig :: a c -> b c -> b c
>
> instance (ArcTypeConfigParms a b) => HasConfig (a c) (b c) where
> ($$) = arcTypeConfig
>
>
> You can now see that the two instance declarations overlap: their
> right hand sides are in fact *identical*. Remember that the
> typechecker simply matches on the right-hand sides ("heads") of the
> instance declarations.
No they do not overlap, unless there is an a b satisfying NodeTypeConfigParms a b
and ArcTypeConfigParms a b. Which there aint.
>
> If you do -fallow-undecidable-instances, I think your program will
> work (in the Prolog-ish backtracking way), but note that if
> NodeTypeConfigParms and ArcTypeConfigParms are ever given instances at
> the same pair of types, the value of ($$) will be undefined.
As a matter of fact I DID use -fallow-undecidable-instances, as you can see
from my original contribution . . .
_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs