これは初心者の質問ですが、どこにも答えがわかりません。
次のコード:
class A a where
foo :: a
class A a => B a where
bar :: a
bar = (foo :: a)
GHCでのコンパイルに失敗し、次のエラーメッセージが表示されます。
Could not deduce (A a1) arising from a use of `foo'
from the context (B a)
bound by the class declaration for `B'
...
GHCは、型クラスBの定義のすべてのaが同じであると確信していないようです。誰かがその推論の線が正確に何であるかを説明できますか?
5行目のタイプアノテーションを削除すると、もちろん問題は回避されますが、ここで何が起こっているのかを理解したいと思います...