
On Thu, 2020-08-27 at 01:20 +0300, Georgi Lyubenov wrote:
Hi!
I believe the canonical way to handle this in Yesod is the "reader pattern" (https://www.fpcomplete.com/blog/2017/06/readert-design-pattern): * it's by the same author From the top of that post:
"If you must have some mutable state, put it in Env as a mutable reference (IORef, TVar, etc)." So the official guideline is exactly as I detailed in my original post.
* yesod is a ReaderT Yes, but it's MonadReader (HandlerData site site) (HandlerFor site) So I'd have to encode my state in one of
HandlerData handlerRequest :: !YesodRequest handlerEnv :: !(RunHandlerEnv child site) handlerState :: !(IORef GHState) handlerResource :: !InternalState which has no fields for holding arbitrary data. And I centainly don't want to encode several Kilobytes of loaded data in the request URL. Olaf
and I'm not aware of a way to replace this monad with one of your own (e.g. some effects systems State monad, which you can then run as a MVar, so that you have concurrent writing/reading possible between the different threads spawned by yesod for handling each request)
====== Georgi