[英]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 可用的软件包列表。
错误消息指出, docks
从xmonad-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-contrib
和/或xmonad
。 您的包数据库现在包含 xmonad 50 和xmonad-contrib
。xmonad
,这创建了一个不同的包版本 (xmonad 8)。 但是,您可用的xmonad-contrib
仍然来自早期安装,针对 xmonad 50 编译。这个问题被称为Cabal Hell (另一种解释)。
您接下来可以做什么:
/opt/ghc
是非标准安装路径,您的发行版标准路径中可能有其他版本。xmonad
库和一个xmonad-contrib
的安装位置。 ghc-pkg list
和ghc-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.