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

Reply via email to