gpt4 book ai didi

haskell - Monad 变压器和提升功能

转载 作者:行者123 更新时间:2023-12-02 12:42:25 26 4
gpt4 key购买 nike

除了 IO 之外,为什么不需要使用 lift 来在内部 monad 变压器环境中执行函数?我的意思是,如果我的 StateT 优于 WriterT,WriterT 优于 ReaderT,为什么我可以这样做?

tell $ {- any code here for the Writer -}
foo <- asks {- This for the reader -}
and so on...

而不是

lift $ tell $ {- code ... -}
...

是否有特殊的解释或者这只是 Monad Transformers 的编写方式?

最佳答案

这是因为 Monad Transformer Library (MTL) 认识到以这种方式堆叠 monad 是很常见的,因此它们不会将 tell 定义为某个函数 (Mondoid w ) => w -> Writer()

相反,他们有 MonadWriter它被定义为一个类型类,其中以tell作为函数。然后他们定义了大量的 MonadWriter 实例:ReaderTIOWriter(废话)等等。您可以避免烦人的重复lift.

这很常见,任何 monad 转换器(在 MTL 中)都会有一个 Control.Monad.***.Class ,它具有这种类型类。

关于haskell - Monad 变压器和提升功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204573/

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