今天我遇到了以下问题:
我可以使用名为 getScreenWidth 的函数使用 Xlib 绑定读取 Haskell 中的当前屏幕分辨率(--> 我得到一个 IO 整数)。到目前为止,这是有效的。
现在我想将该值用作我的桌面环境 (xmonad) 插件的标签。插件基础结构只允许将“WorkspaceId”(基本上是一个整数)映射到字符串的函数。
...
-- Constructor for PrettyPrint:
ppCurrent :: WorkspaceId -> String
...
目前我正在使用自己的函数将 ID 映射到字符串,该函数正在工作:
myPPCurrent :: WorkspaceId -> String
myPPCurrent x = "Desktop: " ++ show x
输出如预期的那样“桌面:1”(或我使用的任何 ID)。
现在我希望它是“桌面:1 (1680px)”,其中 1680 等于 getScreenWidth 的返回值。
我的问题: getScreenWidth 返回 IO Integer,所以我不能简单地使用,
myPPCurrent x = do
y <- getScreenWidth
return "Desktop: " ++ show x ++ show y
因为我的返回类型不是字符串。谷歌告诉我,我无法在 Haskell 中将“IO Integer”转换为“Integer”,所以我真的不知道如何在使用“IO Integer”生成该字符串。
这甚至可能吗?如果是这样,怎么做?