如何将另一个monad变换器添加到Yesod Handler
堆栈?
具体来说,我想从CRandT
添加Control.Monad.CryptoRandom
,以便我可以为会话ID和密码密钥生成安全随机数。
如果我确实设法将其添加到堆栈中,它是否会在对Web服务器的调用之间共享,还是会为每个连接生成一个新的?我关心的原因是后者将耗尽用于初始化生成器的熵,而前者将在初始化后继续使用相同的生成器。
或许我离开基地并且完全不了解monad变压器堆栈。
答案 0 :(得分:2)
@ bheklilr的想法绝对是您可以采取的方法。一般来说,你不能在Yesod中的HandlerT
下面插入变换器,因为框架不知道如何打开它。
似乎还有另一种方法:您可以在基础数据类型中保留一个类似IORef
的随机数生成器,然后为您的特定MonadCRandom
定义HandlerT App IO
实例单子。我对MonadCRandom
没有任何经验,所以我无法立即展示如何做到这一点,但我认为这不应该太难。您可以将实现基于MonadCRandom
的{{1}}实例。