Question

There's something I find unsatisfying with the below code. As I develop bGameState, I will add more events. Will the fact that playerInputE (and I imagine other Events) share the same initial value lead to problems? In other words, is my initial design sound enough to build off of?

Also, is there an alternative to using changes? I think I meet the criteria for correct use, but am not sure.

makeNetworkDescription :: AddHandler PlayerCommand ->
                           TChan GameState ->
                           IO EventNetwork
makeNetworkDescription addCommandEvent gsChannel = compile $ do
  eInput <- fromAddHandler addCommandEvent
  let playerInputE = accumE initialGS $ updateGS <$> eInput
      bGameState = stepper initialGS playerInputE
      eGameState <- changes bGameState
      reactimate $ (\n -> (atomically $ writeTChan gsChannel n)) <$> eGameState
Was it helpful?

Solution

I do not quite understand what you are trying to do, but you can use the accumB combinator which is defined as

accumB x e = stepper x (accumE x e)

to remove the definition of playerInputE.

It appears to me that the changes function is used correctly.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top