
Hey, I have main wire for a game: mainGameWire :: WireP Input GameState and a wire for an info screen (to display a message): infoScreenWire :: Sting -> WireP Input GameState I functions to test if a game has been won or lost: gameWon :: GameState -> Bool gameLost :: GameState -> Bool Now I want to switch between the info screen and the main game. A different message should be displayed depending on if the player one or lost. One working way is this: mainWire = F.fix (\start -> infoScreenWire "Press Enter to start" --> (unless gameWon . ((unless gameLost . mainGameWire) --> (infoScreenWire "You LOST!") --> start)) --> (infoScreenWire "You WON!") --> start) This works, but is pretty clumsy. So I am trying to use switchBy: lostWire = startScreenWire "YouLost" --> inhibit mainGameWire' wonWire = startScreenWire "YouWon" --> inhibit mainGameWire' mainGameWire' = (unless gameWon --> inhibit [wonWire]) . (unless gameLost --> [lostWire]) mainGameWire mainWire = switchBy id mainGameWire' This does NOT work because: a) WireP Input GmaeState is not a monoid. b) The exception type for the main Game wire is "WireP Input GameState" I guess a) is easily solveable ... but for b) ... do I really have to change the exception type for mainGameWire (and all the wires it uses ...)? What is the "proper" way of doing this type of switching/how should switchBy be used? Thanks! Nathan