今日、私は次の問題に遭遇しました:
getScreenWidth という関数を使用して、Xlib バインディングを使用して Haskell で現在の画面解像度を読み取ることができます (--> IO Integer を取得します)。これはこれまでのところ機能しています。
この値を、デスクトップ環境 (xmonad) のプラグインのラベルとして使用したいと考えています。プラグイン インフラストラクチャでは、"WorkspaceId" (基本的には整数) を文字列にマッピングする関数のみが許可されます。
...
-- Constructor for PrettyPrint:
ppCurrent :: WorkspaceId -> String
...
現在、私は独自の関数を使用してIDを文字列にマップしていますが、これは機能しています:
myPPCurrent :: WorkspaceId -> String
myPPCurrent x = "Desktop: " ++ show x
出力は予想どおり「デスクトップ:1」(または私が使用しているID)です。
ここで、1680 が getScreenWidth の戻り値に等しい "Desktop: 1 (1680px)" にしたいと考えています。
私の問題: getScreenWidth は IO Integer を返すため、単純に使用することはできません。
myPPCurrent x = do
y <- getScreenWidth
return "Desktop: " ++ show x ++ show y
私は戻り値の型が文字列ではないので。Googleは、Haskellでは「IO Integer」を「Integer」に変換できないと言っていたので、プロトタイプ/コンストラクター(Haskellがそれをどのように呼んでも)「WorkspaceId -> String」を使用しながら保持する方法は本当にわかりませんその文字列を生成するための「IO Integer」。
それはまったく可能ですか?もしそうなら、どのように?