>>699
ありがとうございます。
そのやり方で、インスタンス毎にコンテキスト部分をかえることができました。

ついでに、ConstraintKinds や TypeFamilies を調べている特に、
次の方法でも似たようなことができる事が分かりました。

{-# LANGUAGE MultiParamTypeClasses, ConstraintKinds, TypeFamilies #-}

class C c p where
 f :: (p t) = Int -> t

instance C A X where
 f :: (X t) => Int -> t
 f v = ...

instance C B Y where
 f :: (Y t) => Int -> t
 f v = ...


> 具体的にどういうコードでどういう推論が起こって欲しい?

今回挙げた例で言えば、

g :: (X t) => t
g = f 7

という使い方をすれば B の f ではなく、A の f だとみなされると嬉しいです。