Je pense que cela devrait être vraiment facile pour quelqu'un qui est bon en Haskell mais je n'ai tout simplement pas pu le comprendre car je suis mauvais. Essentiellement, je veux rechercher dans la liste des fenêtres de l'espace de travail actuel, trouver une correspondance avec une certaine condition et appliquer une action à cette fenêtre; si aucune n'est trouvée, alors créer cette fenêtre. J'avais un code squelette comme ceci
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