我正在尝试根据当前使用的屏幕(物理屏幕/显示器)数量调整Xmonad中的键绑定。不知何故,我在这项任务中失败了,可能是由于我缺乏Haskell知识。
在我的xmonad.hs文件中,我定义了我的键绑定:
myKeys =
[ ...
, ...
, ("M-x", showSet1)
, ...
]
到目前为止,我在文件的其他地方定义了showSet1
(abc
是实际定义的占位符:
showSet1 = abc
然后我这样使用myKeys
:
main :: IO ()
main = xmonad
. ewmhFullscreen
...
$ myConfig
myConfig = def
{ modMask = myModMask
, ...
} `additionalKeysP` myKeys
到目前为止,这工作得很好,但现在我想根据屏幕的数量调整showSet1
。我发现了这个线程,并从那里使用以下方法获得屏幕数量:
numScreens :: X Int
numScreens = withDisplay (io.fmap length.getScreenInfo)
我的计划是使用以下内容来定义showSet1
:
showSet1 = if numScreens == 4
then abc
else xyz
在编译xmonad时,我得到以下错误:
• No instance for (Eq (X Int)) arising from a use of ‘==’
• In the expression: numScreens == 4
In the expression:
if numScreens == 4 then
abc
else
xyz
如果我理解正确的话,numScreens的类型是X Int
,我不能将其与4
进行比较。你知道我该怎么做吗我已经尝试了很多东西,包括玩screenCount函数,但到目前为止没有任何效果。
1条答案
按热度按时间z5btuh9x1#
因为你从X得到屏幕的数量,这不是一个纯粹的计算。因此,它是一个
X Int
,而不是普通的Int
。根据asd
和xyz
是什么,这可能会有所帮助: