Из отчета Haskell 2010, раздел 5.4. "объявление экземпляра находится в области видимости тогда и только тогда, когда цепочка объявлений импорта ведет к модулю, содержащему объявление экземпляра.".
Я действительно проверил с помощью простой программы, и она действительно вводит экземпляры области рекурсивно, что даже если они не находятся непосредственно в импортированном модуле.
Почему такое рекурсивное поведение желательно / необходимо? Было бы так плохо, если бы он включил в область видимости все экземпляры, содержащие только внутри целевого модуля? (Я не хочу импортировать один конкретный экземпляр c). Неужели это так сильно увеличит количество импорта? Есть ли какие-то фундаментальные / компиляционные / исторические причины, по которым этого не может быть?
Мое текущее впечатление таково, что большая часть враждебности по отношению к сиротским экземплярам может быть основана на этой предпосылке, поскольку большой риск заключается в том, что вы случайно импортировать нежелательного сироту из какого-то глубоко спрятанного модуля.