Ошибка анализа фигурной скобки в Haskell

Запустив Манджаро и пытаясь заставить работать XMonad, я столкнулся с parse error on input '{' со следующим xmonad.hs:

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

main = do
  xmproc <- spawnPipe "xmobar"

  xmonad $ defaultConfig
  { manageHook = manageDocks <+> manageHook defaultConfig
  , layoutHook = avoidStruts  $  layoutHook defaultConfig
  , logHook = dynamicLogWithPP xmobarPP
          { ppOutput = hPutStrLn xmproc
          , pptitle = xmobarColor "green" "" . shorten 50
          }
  , modMask = mod4Mask   -- rebind Mod to the windows key
  } `additionalKeys`
  [ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock; xset dmps force off")
  , ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
  , ((0, xK_Print), spawn "scrot")
  ]

Я нашел это решение на su.sx и взял xmonad.hs из readthedocs.io. Для начала я хотел бы использовать этот конфигурационный файл, однако я не знаю, как применить решение к этому. Если бы кто-то опытный мог объяснить, почему появляется эта ошибка и как ее исправить, я был бы очень признателен, так как я только недавно начал с Haskell, и это действительно сводит меня с ума в неизвестной степени...:D

1 ответ

Решение

Отступ все после xmonad $ defaultConfig строка справа (кажется, что некоторые отступы были потеряны при вставке примера):

main = do
    xmproc <- spawnPipe "xmobar"

    xmonad $ defaultConfig
        { manageHook = manageDocks <+> manageHook defaultConfig
        , layoutHook = avoidStruts  $  layoutHook defaultConfig
        , logHook = dynamicLogWithPP xmobarPP
                        { ppOutput = hPutStrLn xmproc
                        , ppTitle = xmobarColor "green" "" . shorten 50
                        }
        , modMask = mod4Mask     -- Rebind Mod to the Windows key
        } `additionalKeys`
        [ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock; xset dpms force off")
        , ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
        , ((0, xK_Print), spawn "scrot")
        ]

Строки на уровне родительского отступа в блоке do разбираются как отдельные операторы, что здесь не подходит.

Другие вопросы по тегам