[英]How does XMonad keys functions gets reduced?
我试图了解如何评估XMonad配置函数。 第一个例子来自Xmonad 文档 :
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 ()))
这里的问题是评估顺序。 当应用于某些XConfig
, keys
返回Map,然后我们得到的Map应该应用于c
(如果我做对了),但Map如何应用于某些东西?
你的描述不太正确。 keys
是一个记录字段。
当你有一个字段为foo :: T
的记录类型R
时, foo
本身(用作一个值)的类型为R -> T
(它是一个记录访问器函数)。
由于keys
是XConfig
一个字段, XConfig
其类型实际上是
keys :: XConfig l -> !(XConfig Layout -> Map (ButtonMask, KeySym) (X ()))
在
keys defaultConfig c
我们从defaultConfig
提取keys
字段。 存储在该字段中的值本身就是一个函数,我们将其应用于c
以获取Map
。
Map
不是一个功能; 它是一种数据结构,并不适用于任何东西。 相反,您正在创建一个基于defaultConfig
的新配置,其keys
功能将替换为新的匿名函数。 该函数采用一种配置,并对其应用两个函数:你的mikeys
,以及keys defaultConfig
返回的任何函数keys defaultConfig
。 两个结果Maps
将由配置的key
功能合并并返回。
然后xmonad
使用这个新配置,其中包括提取合并的Map
以设置密钥绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.