On 3/27/07, Jean-Marie Gaillourdet <[EMAIL PROTECTED]> wrote:
> I concur. The class declares T as being a ternary relation such that
> the following holds
> forall r p p' s s'. T(r,p,s) && T(r,p',s') -> s = s'
> Now, the instance `T root (Any root) sel' is satisfied when
> root=Int, sel = Bool and when root=Int, sel = Int. Does it not? That
> falsifies the above proposition. In other words, the instance T is not
> functional with respect to the first and the third arguments.
>
> That is not surprising. What is surprising is why GHC 6.6 accepts such
> an instance?
GHC 6.6 does not accept such instances. Add the following code to the
module TestCase
> instance T Int Int Int
> instance T Int Int Bool
I'm not an expert as well, but I think oleg was actually talking about
instance T Int (Any Int) Int
instance T Int (Any Int) Bool
which also fails (on GHC 6.6) with:
Functional dependencies conflict between instance declarations:
instance T Int (Any Int) Int -- Defined at ...
instance T Int (Any Int) Bool -- Defined at ...
although just
instance T root (Any root) sel
is accepted.
--
Felipe.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe