繁体   English   中英

尝试在 Xmonad 中使用 ManagerDocks 时出现模糊的“无法匹配预期类型”错误

[英]Vague 'Couldn't match expected type' error when trying to use ManagerDocks in Xmonad

我正在尝试将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)

此错误表明您的构建以某种方式依赖于两个不同的xmonad Cabal 包。 当编译任何东西时,GHC 存储它来自的(在Prelude的情况下是base )以及类型名称本身(例如Prelude.Maybe )。 您可以使用ghc-pkg list查看 GHC 可用的软件包列表。

错误消息指出, docksxmonad-0.14.2@xmonad-0.14.2-50ceb56c2be27c58b715ff1418342ea50324c61ceef6f33afc6bf382abd08795包中生成了一个XMonad.Core.XConfig类型的值(为简洁起见,我将其称为“xmonad 50”)。 请注意, docks本身是xmonad-contrib包的一部分。 但是, xmonad期望的值是来自XMonad.Core.XConfig包(“xmonad 8”)的xmonad-0.14.2@xmonad-0.14.2-8c611bf8742b1b94190ab2fa494cb2a1cd3f8666db2ba536c81ae848ea043a6b类型。

这是您构建的依赖关系图:

  • 你的构建
    • xmonad 8
    • xmonad-贡献
      • 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 listghc-pkg list --user可能会在这里提供帮助,或者失败时,使用strace或类似工具查看xmonad在重新编译时的位置。
  • 删除并重新安装包,这样你就只有一个xmonad和一个xmonad-contrib依赖于它。 如果您在上一步中找到了额外的版本,您可以尝试ghc-pkg unregister它们,如果没有,删除完整的包数据库并再次(一起)重新安装所需的包会有所帮助。

以后尽量不要安装不同来源的 XMonad 相关包,如果你想使用新式 Cabal 构建,请查看专门关于新式构建和 XMonad 的教程(我没有使用它,所以很遗憾不能建议任何.)

您的主要功能需要类似于

main = do
  xmonad $ docks def

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM