Я думаю, что это должно быть действительно легко для того, кто хорош в Haskell, но я просто не мог понять это, потому что я плох в этом. По сути, я хочу просмотреть список окон в текущей рабочей области, найти окно, соответствующее некоторому условию, и применить к нему какое-то действие; если не найден, создайте это окно. У меня был такой код скелета
import qualified XMonad.StackSet as W
import XMonad.Actions.WindowGo
findWindow condition actionIfFound actionIfNotFound =
ifWindow (condition <&&> member W.current) windowFound actionIfNotFound
where windowFound = ask >>= w -> do actionIfFound w