XMonad按键功能如何减少?

时间:2018-12-22 14:42:54

标签: haskell xmonad

我试图了解如何评估XMonad配置功能。第一个示例来自Xmonad docs

import qualified Data.Map as M
--

main = xmonad $ defaultConfig {
  --
  , keys          = \c -> mykeys c `M.union` keys defaultConfig c
  --
  }
where
    mykeys (XConfig {modMask = modm}) = M.fromList $
         [ ((modm , xK_x), spawn "xlock") ]

键的类型是一个函数: keys :: !(XConfig Layout -> Map (ButtonMask, KeySym) (X ())) 这里的问题是评估顺序。 keys应用于某些XConfig时会返回Map,然后将我们拥有的Map应用于c(如果我理解正确的话),但是Map如何应用于某些东西?

2 个答案:

答案 0 :(得分:2)

您的描述不太正确。 keys是一个记录字段。

当您具有字段R的记录类型foo :: T时,foo本身(用作值)的类型为R -> T(这是一个记录访问器函数)。

由于keysXConfig的字段,因此其类型实际上是

keys :: XConfig l -> !(XConfig Layout -> Map (ButtonMask, KeySym) (X ()))

keys defaultConfig c

我们从keys中提取defaultConfig字段。存储在此字段中的值本身就是一个函数,我们将其应用于c以获得Map

答案 1 :(得分:1)

Map不是一个函数;这是一个数据结构,它不会应用于任何事物。相反,您将基于defaultConfig创建一个新配置,并用其keys函数替换为新的匿名函数。 那个函数需要一个配置,并对其应用两个函数:mikeyskeys defaultConfig返回的任何函数。配置文件的Maps函数合并并返回两个结果key

xmonad然后使用此新配置,其中涉及提取合并的Map来设置您的键绑定。