Hello,

On 5/9/06, Stefan Wehr <[EMAIL PROTECTED]> wrote:
>>     class C a
>>     class F a where type T a
>>     instance F [a] where type T [a] = a
>>     class (C (T a), F a) => D a where m :: a -> Int
>>     instance C a => D [a] where m _ = 42

But there is also the equality `T [Int] = Int` which we could apply.
I think I see what you mean.  Here is what I worked out in case anyone
else didn't follow.
The axioms from the above declarations are:
1. forall a. F [a]
2. forall a. F [a] => T [a] = a
3. forall a. D a => C (T a) /\ F a
4. forall a. C a => D [a]
"proof"
goal: D [Int]
Using 4 with a = Int:
goal: C Int
Use (3 with a = [Int]) and (2 with a = Int) to get a new rule:
5. D [Int] /\ F [Int] => C Int /\ F [Int]
Using 5 and projection:
goal: F [Int], D [Int]
Using 1 with a = Int:
goal: D [Int]

Now we are back to where we started.  In this case we can notice this
and give up, but in general this might be tricky.

-Iavor
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org//mailman/listinfo/haskell-prime

Reply via email to