В GHC-8.2.2 может ли перекрывающееся разрешение экземпляра зависеть от того, включен ли файл в качестве открытого модуля?

Я сталкиваюсь со следующим трудно понять поведение из GHC-8.2.2

У меня есть несколько перекрывающихся экземпляров классов типов. Нет непоследовательных экземпляров классов типов. Есть определенный экземпляр класса типов, примерно,

instance (C f h, C g h) => D1 (D2 f g) h 

где C имеет перекрывающиеся экземпляры. Когда я загружаю свой проект в stack repl, все хорошо. Контекст этого экземпляра разрешается в случаях C Я ищу.

Если я создаю файл test.hs который импортирует тип данных, подпадающий под описанный выше пример, не все хорошо. Когда я загружаю это в stack replи вызвать операцию D1тогда ясно, что контекст экземпляра D1 решается на "неправильный" случай C,

Что особенно странно, что если я добавлю test.hs для моего проекта в качестве открытого модуля, затем перезагрузите его в repl без каких-либо других изменений, тогда контекст вышеупомянутого экземпляра будет преобразован в "правильный" экземпляр C,

Я не вижу такого поведения с GHC-7.10.3, 8.0.1, 8.0.2 или с 8.4.3. Возможно, это связано с этой ошибкой?

Но я не использую несвязные экземпляры, что, по-видимому, и связано с этой ошибкой. Я использую достаточное количество языковых расширений в модуле, где приведен выше пример:

{-#LANGUAGE TypeFamilies, UndecidableInstances, FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies, GADTs,  DataKinds, PolyKinds, TypeOperators, PatternSynonyms, RankNTypes, FlexibleContexts, ScopedTypeVariables, DefaultSignatures #-}

У меня пока нет минимального примера. Минимальный пример поведения можно найти в GHC-Repro. Бежать test.sh увидеть явление. Что я хотел бы знать, это:

  1. Может ли это быть намеренным поведением GHC, и я просто делаю что-то не так.
  2. Если я делаю что-то не так, то я могу выбрать "правильный" экземпляр при импорте материала из моего проекта в другие проекты.

Эта проблема в настоящее время отслеживается по адресу: https://ghc.haskell.org/trac/ghc/ticket/15599

0 ответов

Другие вопросы по тегам