https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.6#superclass-expansion-is-more-conservative

내가 9.4 -> 9.6 마이그레이션에서 겪고 있는 문제가 이거랑 관련이 있는거 같은데(확실치 않음)... 9.4에서는 c :: Type -> Constraint 일때 forall c. c Int 뭐 이런 조건이 있으면, 모든 c에 대해 c Int가 존재하는게 말이 안되는데도 실제로 c Int 꼴로 쓰이는 c만 고려해서 타입체크를 통과시켜줬던거 같다(이것도 확실하지 않음). 근데 9.6에선 당연히 거부당한다.

위의 내 이해가 맞다면 9.4의 constraint solving 완전 무근본이었단건데, 이건 또 믿기 어렵다(하스켈의 설계 결정에 대한 신뢰 유지한다고 하면). 어디서 내가 잘못 파악한거지.

@bglbgl gwyng 말씀하신 forall c. c Int 꼴이 instance head에 등장하는 건 아닐 거고 instance context나 superclass로 들어 오는 걸 텐데 그것도 instance (forall c. c Int) => ... 꼴이 아니라 instance forall c. c Int => ...이런 꼴이면 해당 변화랑 관계가 있을 여지가 있는 것 같네요. 물론 정확한 건 코드를 봐야 알거 같지만요.

1