[Haskell-beginners] Depended switching in netwire
es at ertes.de
Fri Nov 9 18:15:22 CET 2012
Nathan Hüsken <nathan.huesken at posteo.de> wrote:
> 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
> 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?
The proper way is to use a different inhibition monoid for the inner
wire, something like:
data WinState = Won | Lost | None
instance Monoid WinState where
mempty = None
mappend None x = x
mappend x None = x
mappend Won _ = Won
mappend _ Won = Won
mappend _ _ = Lost
game = switchBy start (start None)
start None = startScreen "Welcome to the game" --> mainGame
start Won = startScreen "You have won!" --> mainGame
start Lost = startScreen "You have lost, sorry!" --> mainGame
Not to be or to be and (not to be or to be and (not to be or to be and
(not to be or to be and ... that is the list monad.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 836 bytes
Desc: not available
More information about the Beginners