XMonad 键功能如何减少?
How does XMonad keys functions gets reduced?
我正在尝试了解 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
returns Map 应用于某些 XConfig
时,然后我们得到的 Map 应该应用于 c
(如果我没看错的话),但是 Map 怎么可能应用于某物?
您的描述不太正确。 keys
是一个记录字段。
如果记录类型 R
带有字段 foo :: T
,则 foo
本身(用作值)的类型为 R -> T
(它是一条记录访问函数)。
由于keys
是XConfig
的一个字段,所以它的类型其实是
keys :: XConfig l -> !(XConfig Layout -> Map (ButtonMask, KeySym) (X ()))
在
keys defaultConfig c
我们从 defaultConfig
中提取 keys
字段。该字段中存储的值本身就是一个函数,我们将其应用于 c
以获得 Map
.
Map
不是函数;它是一种数据结构,并没有应用于任何事物。相反,您正在创建一个基于 defaultConfig
的新配置,其 keys
函数替换为新的匿名函数。 That 函数接受一个配置,并对其应用两个函数:你的 mikeys
和任何函数 keys defaultConfig
returns。两个结果 Maps
被合并并由您的配置的 key
函数返回。
xmonad
然后使用这个新配置,其中涉及提取合并的 Map
来设置您的键绑定。
我正在尝试了解 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
returns Map 应用于某些 XConfig
时,然后我们得到的 Map 应该应用于 c
(如果我没看错的话),但是 Map 怎么可能应用于某物?
您的描述不太正确。 keys
是一个记录字段。
如果记录类型 R
带有字段 foo :: T
,则 foo
本身(用作值)的类型为 R -> T
(它是一条记录访问函数)。
由于keys
是XConfig
的一个字段,所以它的类型其实是
keys :: XConfig l -> !(XConfig Layout -> Map (ButtonMask, KeySym) (X ()))
在
keys defaultConfig c
我们从 defaultConfig
中提取 keys
字段。该字段中存储的值本身就是一个函数,我们将其应用于 c
以获得 Map
.
Map
不是函数;它是一种数据结构,并没有应用于任何事物。相反,您正在创建一个基于 defaultConfig
的新配置,其 keys
函数替换为新的匿名函数。 That 函数接受一个配置,并对其应用两个函数:你的 mikeys
和任何函数 keys defaultConfig
returns。两个结果 Maps
被合并并由您的配置的 key
函数返回。
xmonad
然后使用这个新配置,其中涉及提取合并的 Map
来设置您的键绑定。