Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 将monad转换器添加到Yesod处理程序堆栈_Haskell_Yesod_Monad Transformers - Fatal编程技术网

Haskell 将monad转换器添加到Yesod处理程序堆栈

Haskell 将monad转换器添加到Yesod处理程序堆栈,haskell,yesod,monad-transformers,Haskell,Yesod,Monad Transformers,如何将另一个monad转换器添加到YesodHandler堆栈 具体来说,我想从Control.Monad.CryptoRandom添加CRandT,这样我就可以为会话ID和密码密钥之类的东西生成安全的随机数 如果我成功地将其添加到堆栈中,它将在对web服务器的调用中共享,还是会为每个连接生成一个新的调用?我关心的原因是后者将使用用于初始化生成器的熵,而前者将在初始化后继续使用相同的生成器 或者可能我太离谱了,完全不了解monad transformer stacks。@bheklillr的想法

如何将另一个monad转换器添加到Yesod
Handler
堆栈

具体来说,我想从
Control.Monad.CryptoRandom
添加
CRandT
,这样我就可以为会话ID和密码密钥之类的东西生成安全的随机数

如果我成功地将其添加到堆栈中,它将在对web服务器的调用中共享,还是会为每个连接生成一个新的调用?我关心的原因是后者将使用用于初始化生成器的熵,而前者将在初始化后继续使用相同的生成器


或者可能我太离谱了,完全不了解monad transformer stacks。

@bheklillr的想法绝对是你可以采用的方法。一般来说,在YesSOD中不能在
HandlerT
下面插入转换器,因为框架不知道如何将其展开


确实有另一种方法:您可以在基础数据类型中保留一个随机数生成器,如<代码> IORef < /代码>,然后为您的特定<代码> HandlerT App IO < /代码>单元格定义<代码> MundCurrOD/<代码>实例。我没有任何使用MonadCRandom的经验,因此我无法立即演示如何使用,但我认为这应该不会太难。您可能可以围绕

CRandT
MonadRandom
实例来实现
CRandT g Handler

我认为您可以将
CRandT g Handler
作为您的monad,在为
处理程序
类型应用run函数之前,您必须使用
runCRandT
evalCRandT
。Michael-有趣的是,您应该提到它。我刚在你的网站上找到wiki页面。正在调查。谢谢。请注意,我在Yesod的书中添加了对此的深入解释和演示:非常好!它恰好回答了我所问的问题:-)。顺便说一句,O'Reilly什么时候印刷你的新书?我想买一份更新版。我没有确切的出版日期,这取决于我什么时候拿到手稿,这取决于我什么时候拿到1.4版。可能六个月是上限。