- 论坛徽章:
- 95
|
原帖由 sw2wolf 于 2009-5-5 14:52 发表
floatLocation :: Window -> X (ScreenId, W.RationalRect)
--.......
rr <- snd `fmap` floatLocation w
--....
这里的fmap如何理解呢?
fmap :: (Functor f) => (a->b) -> f a -> f b
snd :: (c, d) -> d
floatLocation w 的类型为 X (ScreenId, W.RationalRect)
那么, fmap 应用到 snd 上时,会将 a 替换为 (c,d), 将 b 替换为 d, 于是 fmap snd 的类型就是 f (c, d) -> f d;在将 fmap snd 应用到 floatLocation w 上时,会把这里的 f 换为 X, (c,d) 换为 (ScreenId, W.RationalRect),就得 X (ScreenId, W.RationalRect) -> X W.RationalRect,则 fmap snd (floatLocation w) 的类型就是 X W.RationalRect
[ 本帖最后由 MMMIX 于 2009-5-5 16:38 编辑 ] |
|