Я пытаюсь настроить XMonad без фактического понимания синтаксиса Haskell .Конфигурация Haskell XMonad с использованием readProcess
Я запускаю сеанс гнома с xmonad сверху. Я хочу, чтобы нажать моды-р для тумблера гнома-панель:
- если панель гнома не работает Я хочу, чтобы запустить его.
- если панель гнома уже работает, я хочу, чтобы убить его
Я думал, что это будет сделать это:
startgpanel :: X()
startgpanel = do
gp <- readProcess "pidof" ["gnome-panel"] ""
if (length gp)
then spawn "killall gnome-panel"
else spawn "gnome-panel"
...
((myModMask, xK_g), startgpanel)
...
Но я получаю сообщение об ошибке:
xmonad.hs:169:12:
Couldn't match expected type âX (t0 a0)â
with actual type âIO Stringâ
In a stmt of a 'do' block:
gp <- readProcess "pidof" ["gnome-panel"] ""
In the expression:
do { gp <- readProcess "pidof" ["gnome-panel"] "";
if (length gp) then
spawn "killall gnome-panel"
else
spawn "gnome-panel" }
Я действительно не понимаю концепцию Monad, я просто хочу, чтобы сделал несколько ввода-вывода, но кажется очень сложным ...
похоже, что у вас был знак доллара в сообщении об ошибке, но не в коде, который вы отправили – hao
Ошибка совпадает с $ или нет. Интересно, что означает «X (t0 a0)» ... –
попробуйте добавить 'liftIO $ readProcess" pidof "...'. 'liftIO' способен преобразовывать вычисления' IO a' в вычисления 'X a' – hao