String Haskell,在使用IO Integer计算该字符串时返回字符串
今天我遇到了以下问题: 我可以使用名为getScreenWidth(->我得到一个IO整数)的函数,使用Xlib绑定读取Haskell中的当前屏幕分辨率。到目前为止,这是有效的 现在我想用这个值作为我的桌面环境(xmonad)插件的标签。插件基础设施只允许将“WorkspaceId”(基本上是一个整数)映射到字符串的函数String Haskell,在使用IO Integer计算该字符串时返回字符串,string,haskell,io,xmonad,String,Haskell,Io,Xmonad,今天我遇到了以下问题: 我可以使用名为getScreenWidth(->我得到一个IO整数)的函数,使用Xlib绑定读取Haskell中的当前屏幕分辨率。到目前为止,这是有效的 现在我想用这个值作为我的桌面环境(xmonad)插件的标签。插件基础设施只允许将“WorkspaceId”(基本上是一个整数)映射到字符串的函数 ... -- Constructor for PrettyPrint: ppCurrent :: WorkspaceId -> String ... 目前,我正在使用
...
-- Constructor for PrettyPrint:
ppCurrent :: WorkspaceId -> String
...
目前,我正在使用自己的函数将ID映射到字符串,该函数正在工作:
myPPCurrent :: WorkspaceId -> String
myPPCurrent x = "Desktop: " ++ show x
输出如预期的“Desktop:1”(或我使用的任何ID)
现在我希望它是“Desktop:1(1680px)”,其中1680等于getScreenWidth的返回值
我的问题:getScreenWidth返回IO整数,所以我不能简单地使用
myPPCurrent x = do
y <- getScreenWidth
return "Desktop: " ++ show x ++ show y
myPPCurrent x=do
y一旦进入IO单子,就不能离开它,因此需要返回一个IO字符串,而不是String
,例如
myPPCurrent :: WorkspaceId -> Integer -> String
myPPCurrent x = "Desktop: " ++ show x ++ show y
getWorkspaceName :: WorkspaceId -> IO String
getWorkspaceName id = do
w <- getScreenWidth
return $ myPPCurrent id w
myPPCurrent::WorkspaceId->Integer->String
myPPCurrent x=“桌面:”++show x++show y
getWorkspaceName::WorkspaceId->IO字符串
getWorkspaceName id=do
w一旦进入IO单子,就不能离开它,因此需要返回一个IO字符串,而不是String
,例如
myPPCurrent :: WorkspaceId -> Integer -> String
myPPCurrent x = "Desktop: " ++ show x ++ show y
getWorkspaceName :: WorkspaceId -> IO String
getWorkspaceName id = do
w <- getScreenWidth
return $ myPPCurrent id w
myPPCurrent::WorkspaceId->Integer->String
myPPCurrent x=“桌面:”++show x++show y
getWorkspaceName::WorkspaceId->IO字符串
getWorkspaceName id=do
w我从未使用过XMonad:我的回答基于Haskell的一般知识和我在2½分钟内在互联网上找到的东西
无论如何,我假设在某个地方有一个调用xmonad
的main
main = xmonad myConfig
或许
main = xmonad XConfig {
normalBorderColor = "#8080ff",
-- etc
或者别的什么。让我们看看类型
main :: IO ()
xmonad :: (LayoutClass l Window, Read (l Window)) => XConfig l -> IO ()
myConfig :: XConfig l -- whatever type `l` is
现在,假设我们有
makeMyConfig :: IO (XConfig l) -- I still don't know what `l` is
makeMyConfig
不是一种配置——它是在运行时进行配置的东西,可能取决于来自磁盘的文件、时间或屏幕分辨率。。。。你这样使用它:
main = do
config <- makeMyConfig
xmonad config
main=do
config我从未使用过XMonad:我的回答基于Haskell的一般知识和我在2½分钟内在互联网上找到的东西
无论如何,我假设在某个地方有一个调用xmonad
的main
main = xmonad myConfig
或许
main = xmonad XConfig {
normalBorderColor = "#8080ff",
-- etc
或者别的什么。让我们看看类型
main :: IO ()
xmonad :: (LayoutClass l Window, Read (l Window)) => XConfig l -> IO ()
myConfig :: XConfig l -- whatever type `l` is
现在,假设我们有
makeMyConfig :: IO (XConfig l) -- I still don't know what `l` is
makeMyConfig
不是一种配置——它是在运行时进行配置的东西,可能取决于来自磁盘的文件、时间或屏幕分辨率。。。。你这样使用它:
main = do
config <- makeMyConfig
xmonad config
main=do
配置您需要留在monad中。您需要留在monad中。