Hi,
From the very helpful posts of John Hughes and others concerning "Monadic Loops", I've been advised to re-implement my neural net simulator using lazy state threads to avoid crashes to which recursive (and tail-recursive) monads lead.
I had been using monad transformers to lift IO operations: data NeuralNet = NN { ... } data NNO a = NNO (NeuralNet -> (a,NeuralNet)) data NNT m a = NNT (NeuralNet -> m (a,NeuralNet)) following the example of a state transformer in "Functional Programming with Overloading and Higher-Order Polymorphism". I am trying to reimplement with data ST s a from Control.Monad.ST.Lazy and "Lazy Functional State Threads" however there is something I think I do not understand, that is the "s" in the ST dataype. The compiler tells me it needs to be instantiated, but I am presuming that a type such as type NNST = ST NeuralNet a is useless because there is no way (from this module) to access that state using the "update" method of the MonadState class. 1. Am I correct in thinking that I need to use a monad transformer lifting from the ST monad to incorporate my NeuralNet datatype 2. Can I merely instantiate ST as ST () a? Thanks in advance. Vivian McPhail