我正在尝试将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)
答案 0 :(得分:0)
此错误表明,您的构建某种程度上依赖于两个不同的xmonad
Cabal软件包。编译任何内容时,GHC都会与类型名称本身(例如Prelude.Maybe
)一起存储它来自的包(对于Prelude
,base
) 。您可以使用ghc-pkg list
查看GHC可用的软件包列表。
该错误消息表明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-contrib
和/或xmonad
。您的软件包数据库现在包含xmonad 50和xmonad-contrib
。xmonad
,这创建了一个不同的软件包版本(xmonad 8)。但是,您仍然可以使用xmonad-contrib
,它是针对xmonad 50编译的早期安装版本。此问题被称为Cabal Hell(another explanation)。
下一步可以做什么:
/opt/ghc
是非标准的安装路径,发行版的标准路径中可能还有其他版本。xmonad
库和一个xmonad-contrib
的安装位置。 ghc-pkg list
和ghc-pkg list --user
可能会有所帮助,或者失败,请使用strace
or similar tools来查看xmonad
在重新编译时的外观。xmonad
和一个xmonad-contrib
。如果在上一步中找到了其他版本,则可以尝试ghc-pkg unregister
,如果没有,请删除完整的软件包数据库,然后再次(一起!)重新安装所需的软件包。将来,请尝试不要从其他来源安装与XMonad相关的软件包,如果您要使用新型Cabal构建,请查看专门关于新型构建和XMonad的教程(不幸的是,我没有使用该教程)不能提出任何建议。)
答案 1 :(得分:-1)
您的主要功能必须类似于
main = do
xmonad $ docks def