Haskell 大括号解析错误

Haskell curly brace parse error

运行 Manjaro 并试图让 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")
  ]

我找到了这个 solution on su.sx and took my xmonad.hs from readthedocs.io。 对于入门,我想使用该配置文件,但我不知道如何将解决方案应用于此。如果有人精通可以解释为什么会出现该错误以及如何解决它,我将非常感激,因为我最近才开始使用 Haskell 并且它真的让我的想法不知所措......:D

xmonad $ defaultConfig 行之后的所有内容向右缩进(粘贴 the example 时似乎丢失了一些缩进):

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 块中 "parent" 缩进级别的行被解析为单独的语句,这在此处不合适。