gpt4 book ai didi

Haskell(嵌套)ReaderT

转载 作者:行者123 更新时间:2023-12-05 01:33:10 27 4
gpt4 key购买 nike

如何访问 ReaderT 的内部 monad。

在我的例子中,我有类型:

newtype VCSSetupAction a = VCSSetupAction (ReaderT (Maybe VCSConf) IDEM a)
deriving (Monad, MonadIO, MonadReader (Maybe VCSConf))

我无法在这个 Monad 中运行的函数中访问(也许是 VCSConf)

commitAction' :: Common.VCSAction ()
commitAction' = do
config <- ask
...

但我也应该能够访问内部的 IDEM,它的类型是:

type IDEM = ReaderT IDERef IO

所以我希望能够做类似的事情

commitAction' :: Common.VCSAction ()
commitAction' = do
config <- ask
ideRef <- lift $ ask -- this does not compile/work

我对 Monad 的理解还不够好。感谢您的帮助。

最佳答案

要直接使用 lift,您的 newtype 必须派生 MonadTrans,但由于它不是转换器,因此这在本文中是不合适的案子。相反,您可以将操作包装在数据构造函数中。现在您直接与 ReaderT 打交道,因此您可以使用它的 lift

ideRef <- VCSSetupAction $ lift $ ask

您可能想为此定义一个帮助器,使事情变得更干净。

关于Haskell(嵌套)ReaderT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288953/

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