Ответ 1
Компилятор, попадающий в бесконечный цикл без UndecidableInstances
или UndecidableSuperclassCycles
, является ошибкой компилятора, как указано jberryman. Вы должны сообщить об этом на сайте GHC Trac.
Я немного упростил ваш пример, который может или не может прояснить ситуацию и, скорее всего, сделает ваш отчет об ошибках более эффективным.
{-# LANGUAGE TypeFamilyDependencies #-}
module TFLoop where
import Data.Proxy
main :: IO ()
main = return $ f Proxy Proxy (Just 'c')
data D1 x
data D2
type family TF d a = t | t -> d a
type instance TF (D1 x) a = Maybe (TF x a)
type instance TF D2 () = Char
f :: proxy1 x -> proxy2 a -> TF x a -> ()
f _ _ _ = ()