1

我有一个返回用户 ID 的单子函数:

do
 id <- getUserId

我需要能够在 getUserId 上“叠加”一个函数,该函数查找并返回 getUserId 返回的值的别名

显然,我可以编写一个特定的函数 getAlias 并重写 monad 本身:

do
 id <- getAlias getUserId

但是我觉得这可以通过将 getAlias 隐藏在 monad 的绑定函数中来更普遍、可重用和不可见地完成。

Monad Transformers 是否执行此功能,即将内部 monad 的绑定函数与外部 monad 的绑定函数组合在一起?或者我需要一些其他的控制结构吗?

4

1 回答 1

1

我真的不认为你可以在这里得到比函数应用程序更轻的重量。要回答您的直接问题:

  1. 是的,monad 转换器结合了转换器和底层 monad 的绑定功能。
  2. 不,一般来说,你不能结合两个 monad 的绑定函数并产生另一个 monad 的绑定函数。

但我认为这两个直接答案中的任何一个都不重要,因为getAlias不太可能成为任何守法单子的约束。(至少,绑定函数必须是非常多态的,这getAlias不是!)。

于 2012-07-05T17:01:28.630 回答