如何在Xmonad的manageHook中链接多个操作?

问题描述:

我试图从托盘图标打开skype/discord时将程序窗口移动到特定工作区"11:w-"并将当前屏幕切换到此工作区。我的问题是我无法获得正确的类型。如何在Xmonad的manageHook中链接多个操作?

myManageHook = composeAll . concat $ 
    [ [ className =? t --> sequence [doShift "11:w-", screenWorkspace "11:w-"] | t <- rarelyUsedApps] ] 

rarelyUsedApps = ["Skype", "discord"] 

此代码产生一个错误

Error detected while loading xmonad configuration file: /home/i/.xmonad/xmonad.hs 

xmonad.hs:268:33: 
    Couldn't match type `[Data.Monoid.Endo WindowSet]' 
        with `Data.Monoid.Endo 
          (W.StackSet 
          WorkspaceId (Layout Window) Window ScreenId ScreenDetail)' 
    Expected type: Query 
        (Data.Monoid.Endo 
         (W.StackSet 
          WorkspaceId (Layout Window) Window ScreenId ScreenDetail)) 
     Actual type: Query [Data.Monoid.Endo WindowSet] 
    In the return type of a call of `sequence' 
    In the second argument of `(-->)', namely 
     `sequence [doShift "11:w-", screenWorkspace "11:w-"]' 
    In the expression: 
     className =? t 
     --> sequence [doShift "11:w-", screenWorkspace "11:w-"] 

xmonad.hs:268:60: 
    Couldn't match type `X' with `Query' 
    Expected type: Query (Data.Monoid.Endo WindowSet) 
     Actual type: X (Maybe WorkspaceId) 
    In the return type of a call of `screenWorkspace' 
    In the expression: screenWorkspace "11:w-" 
    In the first argument of `sequence', namely 
     `[doShift "11:w-", screenWorkspace "11:w-"]' 

xmonad.hs:268:76: 
    Couldn't match expected type `ScreenId' with actual type `[Char]' 
    In the first argument of `screenWorkspace', namely `"11:w-"' 
    In the expression: screenWorkspace "11:w-" 
    In the first argument of `sequence', namely 
     `[doShift "11:w-", screenWorkspace "11:w-"]' 

Please check the file for errors. 

我刚意识到,在高于一个代码的第一个错误是,我通过工作空间的名称,而不是工作空间ID来screenWorkspace "11:w-"。另外,对于我的目标, screenWorkspace是完全错误的功能。

不管怎么说,发现我想要的东西已经覆盖维基 https://wiki.haskell.org/Xmonad/General_xmonad.hs_config_tips#Shift_an_app_to_a_workspace_and_view_it