问题标签 [monad-transformers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 在 Haskell 中混合 Monad
我正在尝试在 haskell 中使用 Ubigraph,但我相信我的问题更普遍。我正在尝试编译:
我得到
我可以看到 op 的类型是如何被暗示为与 putStrLn 的返回类型不同的东西,但我不确定如何重新设计此代码以正确编译。我可以简单地更改 op 函数的返回类型吗?
谢谢
haskell - 这个 Monad Stack 函数的名称是什么?
我在 State monad 中有一堆有状态的函数。在程序中的某个时刻,需要一些 IO 操作,所以我将 IO 包装在 StateT 中,得到如下一对类型:
为了简单起见,我不想将 IO 上下文传递到主函数集中,并且我想避免将它们包装在 monad 堆栈类型中。但是为了从顶层函数调用它们,我需要类似于电梯的东西,但我并不是想从内部单子中提升一个值。相反,我想将 StateT monad 中的状态转换为 State monad 中的等价物。为此,我有以下内容:
然后这习惯于交错如下内容:
这似乎是一个相当明显的代码块,所以我想知道这个函数是否有一个标准名称,并且它已经在标准库的某个地方实现了?我试图使描述保持简单,但显然这延伸到将一个变压器从堆栈中拉出,将包装的值转换为变压器类型的表亲,跳过堆栈中下面的单子,然后将结果推回结束。
haskell - 如何使用 ListT 进行回溯和 IO?
我真的不知道应该如何使用 List 转换ListT
器。例如应该如何完成这个简单的任务:
函数的类型应该是什么?
这不是我想要完成的任务(我知道如何使用许多其他方法来解决这个问题),我只是想知道如何使用ListT
来完成这些任务。
haskell - mapMonadTrans :: MonadTrans xT => (ma -> nb) -> xT ma -> xT nb
问题是这样的。我有:
我需要使用修改后的参数来运行它。但是,由于 m 是未知的,我不能简单地使用
因为我需要以某种方式将 (withArgs args) 转换为所有 m 的 m。
我发现的一种可能性是定义我自己的 withArgs,因此:
但是,这是一个杂项,并且特定于一个函数——我需要重新编写每个函数withX :: X -> IO a -> IO a
,例如 Control.Exception.handle
如果有的话,有什么更好的方法来做到这一点?
编辑:在句柄的情况下,我找到了 Control.Monad.CatchIO。在另一种情况下,我使用了另一个更简短的拼凑(不值得发布)来避免上面的拼凑。仍在寻求更好的解决方案!
haskell - 从分类的角度来看,Haskell 的 monad 转换器是什么?
作为一名数学学生,当我在 Haskell 中了解 monad 时,我做的第一件事就是检查它们是否真的是我所知道的意义上的 monad。但后来我了解了单子变换器,而这些似乎并不是范畴论中研究的东西。
特别是我希望它们与分配律有关,但它们似乎真的不同:单子转换器预计适用于任意单子,而分配律是单子与特定其他单子之间的事务。
此外,查看 monad 转换器的常见示例,虽然MaybeT m
与m
组合Maybe
,但StateT m
不是m
with的组合State
。
所以我的问题是分类语言中的单子转换器是什么?
haskell - 应用程序组成,单子不组成
应用程序组成,单子不组成。
上面的说法是什么意思?什么时候一个比另一个更可取?
haskell - 试图了解单子变压器产生的类型
的文档Control.Monad.Trans.Error
提供了这个组合两个 monad 的例子:
我发现这有悖常理:即使ErrorT
据说是wrapping IO
,看起来错误信息已被注入到IO 操作的结果类型中。我原以为会是
基于“包装”一词的通常含义。
为了使事情更加混乱,StateT
每个都有一些:
状态类型s
已经注入到Either
'Right
端,但整体Either
也被包裹在一个函数中。
更令人困惑的是,如果将 monad 反过来组合:
“外部”仍然是一个函数;它不会产生类似的东西Either e (s -> (a, s))
,其中状态函数嵌套在错误类型中。
我确信这一切都有一些潜在的逻辑一致性,但我不太明白。因此,我发现很难思考将一个 monad 与另一个结合起来意味着什么,即使我可以毫不费力地理解每个 monad 各自的含义。
有人可以启发我吗?
(脚注:为了说明的目的,我正在编写ErrorT
这样Identity
并且StateWithError
彼此ErrorWithState
一致。通常我只是使用StateWithError s e a = StateT s (Either e) a
并放弃该ErrorT
图层。
haskell - Haskell:无法弄清楚如何使用单子变压器堆栈
我有一个类型
我想创建一个产生每个当前状态的单子值
但是我今天感觉很愚蠢,我不知道如何转换 to 的T a r [a]
值T a r a
。
haskell - monads-tf:MonadState 的 MonadReader 实例
考虑下一个例子。我有一个单子MyM
,它只是一个StateT
通常MyM
用于读写MyS
状态,所以我有如下功能:
但有时我只需要阅读MyS
,所以我想要MonadReader
上下文而不是MonadState
:
我想写一些类似的东西:
所以基本上我需要每个MonadState
实例都是MonadReader
对应的家庭类型的实例。就像是
但我找不到如何进行类型检查的方法。MonadState
是否可以表达和之间的这种关系MonadReader
?
谢谢。
haskell - 更多 rmonad 库?
我想用RMonad
. 有没有使用“as monad”功能的方法
- 有一个身份 rmonad,将 monad 转换器应用于?
StateT
有变压器之类的常用东西吗?- 向现有的 monad 添加约束?(例如,如果一个人想要一个
StateT
带有额外约束的)
不幸的是,我还没有掌握使其工作的数据系列等东西......否则我可能会很乐意自己编写代码。
编辑
我从图书馆资源中一起破解StateT
,看看它是否有效......