gpt4 book ai didi

haskell - Yesod 的 Handler Monad 是 MonadBaseControl IO 的实例吗?

转载 作者:行者123 更新时间:2023-12-04 14:54:29 27 4
gpt4 key购买 nike

我想用withResource :: MonadBaseControl IO m => Pool a -> (a -> m b) -> m b 来自 Data.Pool我的处理程序代码中的库。我想确定是否 Handler MonadBaseControl IO 的一个实例,但我很难找到 Handler 的确切位置被定义为。
Yesod's Handler Monad (由 mkYesodData 创建) MonadBaseControl IO 的实例或者它可以很容易地合二为一吗?

最佳答案

不,Handler没有 MonadBaseControl IO实例。
但是,它基本上是一个读者,所以写一个并不太难。
假设您使用的是脚手架站点,以下应该可以工作。在 Foundation 的顶部添加一些扩展和导入:

import Control.Monad.Base
import Control.Monad.Trans.Control
import Yesod.Core.Types (HandlerFor(..))
mkYesodData之后的一些方便的地方语句,添加实例:
instance MonadBase IO Handler where
liftBase = liftIO
instance MonadBaseControl IO Handler where
type StM Handler a = a
liftBaseWith ioAct = HandlerFor $ \handlerData ->
ioAct (\handlerAct -> unHandlerFor handlerAct handlerData)
restoreM = return
我不知道您通常尝试做的事情是否是一个好主意,但这应该可以进行类型检查。

关于haskell - Yesod 的 Handler Monad 是 MonadBaseControl IO 的实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68351343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com