
I'm implementing a cyclic neural network. At time t, each neuron will update its output based on the outputs (at time t-1) of the neurons that it's connected to. It will also update the weights for its connections according to some learning rule, and it may destroy a connection or create a new one. So far, the best way I can think of to do this is to have a master list of neurons, and each neuron would know the indices for the other neurons it connects to. I'd write a function to update the neuron (actually returning a "new" neuron), and then do a "map" over the list with that function. That seems OK, but I wonder if there's a better way. I suspect the State monad could be used for this, but I can't figure out how to put the pieces of the puzzle together. Here's what I was thinking: - A connection could be a State monad, where the state is the source neuron and the current weight, and the result would be the weighted input. - A neuron could also be a State Monad, where the state is a list of connections, and the result is the neuron's output. I've read dozens of monad tutorials, but I can't figure out how to trigger all the neurons to update themselves. Is the State Monad appropriate for this problem?