每当 xmonad 启动、重新启动或重新编译时,我都会收到一条 xmessage:
xmonad.hs:1:8:
Could not find module `XMonad'
Perhaps you meant
Monad (needs flag -package haskell98-2.0.0.2)
CgMonad (needs flag -package ghc-7.6.3)
DsMonad (needs flag -package ghc-7.6.3)
Use -v to see a list of the files searched for
这并不能阻止它启动,但我只能在系统重新启动时看到 xmonad 或 xmobar 设置的更新。我当前的 xmonad.hs 只是
import XMonad
main = xmonad defaultConfig
它仍然会产生错误。任何导入其他模块的尝试都会得到类似的结果。我从 Arch 存储库安装了
xmonad
和 xmonad-contrib
,所以这些模块应该正确地位于 ghc 搜索路径中,对吧?我已经尝试像其他一些来源建议的那样从 Cabal 重新安装软件包,但它完全变成了混乱,所以我回到了 Arch 存储库,这应该可以工作。有点不知道从这里该去哪里;任何帮助将不胜感激。
编辑:
ghc-pkg list xmonad
返回
/usr/lib/ghc-7.6.3/packag.conf.d
xmonad-0.11
/home/decalis/.ghc/x86_64-linux-7.6.3/package.conf.d
和
ghc-pkg check
输出位于:http://pastebin.com/BsCPMn8M。看到这个问题之后问题就更清楚了,但我仍然不明白为什么当所有的包及其依赖项都由 pacman 从 Arch 存储库中解决时,它还要在 ~/.cabal
中查找。
在这种情况下,首先要尝试的事情之一就是“从头开始”,即忘记您过去可能安装的所有本地软件包。
为此,请擦除(或重命名/移动)ghc 的包数据库,该数据库位于
~/.ghc/$arch-$os-$ghcver
下(例如 ~/.ghc/i386-linux-7.6.3
)。或者直接删除 ~/.ghc
。
对我来说,解决方案是运行
ghc-pkg recache
,因为 ghc 缓存由于某种原因不同步。在擦除整个 ghc 数据库之前值得尝试一下。
如果您使用堆栈。试试这个:
stack exec xmonad -- --recompile
随后是 stack exec xmonad -- --restart