Где начать с "не удалось сопоставить тип MyId с MyId"


Правка: доступно очень маленькое повторение https://github.com/dten/CouldntMatchTypeRepro

stack test отлично работал на стеке LTS-8.24 (ghc 8.0.2), и я попытался перейти на LTS-10.5 (ghc 8.2.2). Теперь он не выполняет проверку типа, и сообщение об ошибке менее чем полезно.

Типы MyId, перечисленные буквально, являются одним и тем же типом, объявленным в my-model makeId находится в пакете testing-help, который ссылается на my-model, и этот код находится в пакете test, который ссылается на оба.

переезд функция для пакета my-model не приводит к ошибке (но я не хочу, и у меня есть проблема с другими типами даже в том же пакете (всегда использование в тестовом пакете)) Я прочитал информацию о миграции в 8.2, но ничего не выделялось. Любой указатель в правильном направлении ценится:) спасибо

testSpec.hs:785:11: error:
    * Couldn't match type `my-model-0.0.0:Types.Ids.MyId'
                     with `MyId'
      NB: `MyId'
            is defined in `Types.Ids' in package `my-model-0.0.0'
          `my-model-0.0.0:Types.Ids.MyId'
            is defined in `Types.Ids' in package `my-model-0.0.0'
      Expected type: UserId
        Actual type: my-model-0.0.0:Types.Ids.MyId
    * In the expression: makeId "19186adb-26e5-4901-956c-f3ba11fc016d"
      In an equation for `userId':
          userId = makeId "19186adb-26e5-4901-956c-f3ba11fc016d"
    |
785 | userId = makeId "19186adb-26e5-4901-956c-f3ba11fc016d"
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Правки: я пытался удалить .stack-work и даже ~/stack-root

Компоновка пакетов выглядит следующим образом:

package: my-model
  library
  test-suite test
     deps: my-model, testing-help
package: testing-help
  library
     deps: my-model

Никакие требования к версии не установлены (потому что это стиль stack LTS) и все версии моих пакетов являются 0.0.0

Edit2: они все в 1 stack.yaml

Edit3: извините, что получил пакет deps неправильно

1 3

1 ответ:

Похоже, это ошибка в Cabal, или, по крайней мере, недостающая функция. Я не знаю, почему это работает со старыми решателями. выпуск 2800 на стеке упоминает об этом. См. выпуск 1575, выпуск 4087 о кабале.