Неопределенная ошибка «Не удалось найти ожидаемый тип» при попытке использовать ManagerDocks в Xmonad - PullRequest
2 голосов
/ 19 апреля 2019

Я пытаюсь добавить команду docks в мою конфигурацию .xmonad, но добавление ее приводит к несколько запутанной ошибке типа:

Error detected while loading xmonad configuration file: /home/dan/.xmonad/xmonad.hs

xmonad.hs:11:11: error:
    • Couldn't match expected type ‘XConfig l0’
                  with actual type ‘xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Core.XConfig
                                      (xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Choose
                                         xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Tall
                                         (xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Choose
                                            (xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Mirror
                                               xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Tall)
                                            xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Layout.Full))’
      NB: ‘xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795:XMonad.Core.XConfig’
            is defined in ‘XMonad.Core’
                in package ‘xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795’
          ‘XConfig’
            is defined in ‘XMonad.Core’
                in package ‘xmonad-0.14.2@xmonad-0.14.2-8c611bf8742b1b94190ab2fa494cb2a1cd3f8666db2ba536c81ae848ea043a6b’
    • In the first argument of ‘xmonad’, namely ‘(docks def)’
      In the expression: xmonad (docks def)
      In an equation for ‘main’: main = xmonad (docks def)

Please check the file for errors.

Вот мой файл конфигурации:

import           XMonad
import           XMonad.Hooks.ManageDocks (docks)

main :: IO ()
main =
  xmonad (docks def)

Я не уверен, что именно здесь пошло не так, и думаю, что, возможно, я что-то напутал во время установки ... хотя я не уверен, как устранить неполадки.


Выводghc-pkg list xmonad:

/opt/ghc/8.0.2/lib/ghc-8.0.2/package.conf.d
    (no packages)
/home/dan/.ghc/x86_64-linux-8.0.2/package.conf.d
    (no packages)

1 Ответ

0 голосов
/ 21 апреля 2019

Эта ошибка указывает, что ваша сборка как-то зависела от двух разных xmonad пакетов Cabal.При компиляции чего-либо GHC сохраняет вместе с именем типа (например, Prelude.Maybe) пакет , из которого он получен (в случае Prelude, base).Вы можете увидеть список пакетов, доступных для GHC с ghc-pkg list.

. В сообщении об ошибке говорится, что docks сгенерировал значение типа XMonad.Core.XConfig из пакета xmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795 (я буду ссылаться на него как"xmonad 50" далее для краткости).Обратите внимание, что docks сам является частью пакета xmonad-contrib.Однако значение, ожидаемое xmonad, относится к типу XMonad.Core.XConfig из пакета xmonad-0.14.2@xmonad-0.14.2-8c611bf8742b1b94190ab2fa494cb2a1cd3f8666db2ba536c81ae848ea043a6b (далее «xmonad 8»).

Это график зависимостей вашей сборки:

  • ваша сборка
    • xmonad 8
    • xmonad-contrib
      • xmonad 50

Предположение о том, как это произошло:

  • Вы каким-то образом установили xmonad-contrib и / или xmonad, либо из своих репозиториев ОС, либо путем компиляции вручную.Ваша база данных пакетов теперь содержит xmonad 50 и xmonad-contrib.
  • Вы снова установили xmonad, и это создало другую версию пакета (xmonad 8).Тем не менее, xmonad-contrib доступно для вас из более ранней установки, скомпилированной для xmonad 50.

Эта проблема известна как Cabal Hell ( другое объяснение ).

Что вы можете сделать дальше:

  • Убедитесь, что у вас не установлено две версии GHC./opt/ghc - это нестандартный путь установки, возможно, в стандартном пути вашего дистрибутива могут быть другие версии.
  • Узнайте, где установлены две библиотеки xmonad и одна xmonad-contrib.ghc-pkg list и ghc-pkg list --user могут помочь в этом, или если это не удастся, используя strace или аналогичные инструменты , чтобы увидеть, куда смотрит xmonad при перекомпиляции.
  • Удалите и переустановите пакеты, чтобыу вас есть только один xmonad и один xmonad-contrib в зависимости от этого.Если вы нашли дополнительные версии на предыдущем шаге, вы можете попробовать ghc-pkg unregister их, а если нет, то могут помочь удаление полных баз данных пакетов и переустановка необходимых пакетов снова (вместе!).

В будущем постарайтесь не устанавливать пакеты, связанные с XMonad, из разных источников, и если вы хотите использовать сборки Cabal нового стиля, ознакомьтесь с руководством, посвященным сборкам нового стиля и XMonad (к сожалению, я этим не пользуюсь)не могу предложить ни одного.)

...