Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何使用XMonad显示MPD卷_Haskell_Xmonad - Fatal编程技术网

Haskell 如何使用XMonad显示MPD卷

Haskell 如何使用XMonad显示MPD卷,haskell,xmonad,Haskell,Xmonad,我正在尝试使用haskell libmpd读取XMonad中的MPD卷。而独立代码: -- current darcs as of 2010-12-31 {-# LANGUAGE DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, NoMonomorphismRestriction, PatternGuards, Sco

我正在尝试使用haskell libmpd读取XMonad中的MPD卷。而独立代码:

-- current darcs as of 2010-12-31
{-# LANGUAGE
     DeriveDataTypeable,
     FlexibleContexts,
     FlexibleInstances,
     MultiParamTypeClasses,
     NoMonomorphismRestriction,
     PatternGuards,
     ScopedTypeVariables,
     TypeSynonymInstances,
     UndecidableInstances,
     OverloadedStrings
     #-}
{-# OPTIONS_GHC -W -fwarn-unused-imports -fno-warn-missing-signatures #-}

import Control.Applicative
import Control.Monad
import Control.Monad.Instances ()
import Control.Monad.Writer
import Control.Monad.Trans (liftIO)
import Data.List
import Data.Int
import Data.Maybe
import Data.Either
import Data.Either.Utils
import Data.Traversable(traverse)
import qualified Data.Map as M
import System.IO
import System.Environment (getArgs)
import System.Process
import Prelude
import Text.Regex.Posix
import qualified Network.MPD as MPD
import qualified Network.MPD.Commands.Extensions as MPD
import Data.Array
import System.Cmd

int2str :: (Show a, Num a, Ord a) => a -> String
int2str x = if x < 10 then '0':sx else sx where sx = show x

parseMPD :: MPD.Response MPD.Status -> [[String]]
parseMPD (Left e) = return $ show e:repeat ""
parseMPD (Right st) = do
     return [vol, "%"]
     where
          vol = int2str $ MPD.stVolume st
--          song = MPD.withMPD MPD.currentSong 


main = do
     x <- MPD.withMPD $ MPD.status
     let a = unwords (foldr1 (++) (parseMPD x))
     rawSystem "notify-send" ["MPD Volume", a]
——截至2010年12月31日的现行DARC
{-#语言
可派生数据类型,
灵活的语境,
灵活的实例,
多线程类型类,
非线性同态约束,
卫兵们,
ScopedTypeVariables,
例如,
不可判定的例子,
重载字符串
#-}
{-#OPTIONS#u GHC-W-fwarn未使用的导入-fno警告缺少签名#-}
导入控制
进口管制
导入Control.Monad.Instances()
导入控制.Monad.Writer
进口控制单体转运(liftIO)
导入数据。列表
导入数据.Int
导入数据,也许吧
导入数据。或者
导入Data.other.Utils
导入数据。可遍历(遍历)
导入符合条件的数据。映射为M
导入系统.IO
导入System.Environment(getArgs)
导入系统。进程
进口序曲
导入Text.Regex.Posix
将合格的Network.MPD导入为MPD
将合格的Network.MPD.Commands.Extensions作为MPD导入
导入数据。数组
导入系统.Cmd
int2str::(显示a、数字a、Ord a)=>a->字符串
int2str x=如果x<10,则为“0”:sx else sx,其中sx=显示x
parseMPD::MPD.Response MPD.Status->[[String]]
parseMPD(左e)=返回$show e:重复“”
parseMPD(右st)=do
返回[vol,“%”
哪里
vol=int2str$MPD.stVolume st
--歌曲=MPD.withMPD MPD.currentSong
main=do
x a->字符串
int2str x=如果x<10,则为“0”:sx else sx,其中sx=显示x
parseMPD::MPD.Response MPD.Status->[[String]]
parseMPD(左e)=返回$show e:重复“”
parseMPD(右st)=do
返回[vol,“%”
哪里
vol=int2str$MPD.stVolume st
卷::MonadIO m=>m()
音量=do
x m()
圣诞节时,hs:180:11-26
`m'是一个刚性类型变量,由
volume::MonadIO m=>m()的类型签名
在圣诞节时,hs:180:11
预期类型:m(MPD.Response MPD.Status)
实际类型:IO(MPD.Response MPD.Status)

在“do”块的stmt中:x回答:你在xmonad配置中没有使用相同的代码,你这个骗子!您为
添加了绑定。不过,不要担心,它应该很容易修复:您可以使用
liftIO将任何
ioa
操作转换为
MonadIO m=>ma
操作:

volume :: MonadIO m => m()
volume = do
    x <- liftIO . MPD.withMPD $ MPD.status
    let a = unwords (foldr1 (++) (parseMPD x))
    safeSpawn "notify-send" ["MPD Volume", a]
volume::MonadIO m=>m()
音量=do
x
 xmonad.hs:182:14:
     Could not deduce (m ~ IO)
     from the context (MonadIO m)
       bound by the type signature for volume :: MonadIO m => m ()
       at xmonad.hs:180:11-26
       `m' is a rigid type variable bound by
           the type signature for volume :: MonadIO m => m ()
           at xmonad.hs:180:11
     Expected type: m (MPD.Response MPD.Status)
       Actual type: IO (MPD.Response MPD.Status)
     In a stmt of a 'do' block: x <- MPD.withMPD $ MPD.status
     In the expression:
       do { x <- MPD.withMPD $ MPD.status;
            let a = unwords (foldr1 (++) (parseMPD x));
            safeSpawn "notify-send" ["MPD Volume", a] }
     In an equation for `volume':
         volume
           = do { x <- MPD.withMPD $ MPD.status;
                  let a = ...;
                  safeSpawn "notify-send" ["MPD Volume", ....] }
volume :: MonadIO m => m()
volume = do
    x <- liftIO . MPD.withMPD $ MPD.status
    let a = unwords (foldr1 (++) (parseMPD x))
    safeSpawn "notify-send" ["MPD Volume", a]