正确控制monad进行别名

时间:2012-07-05 15:30:59

标签: haskell monads monad-transformers

我有一个monadic函数,它返回一个用户ID:

do
 id <- getUserId

我需要能够在getUserId上添加&#34;,这是一个查找并返回getUserId返回值的别名的函数

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

do
 id <- getAlias getUserId

但是我认为通过将monAlias隐藏在monad的bind函数中,可以更普遍地,可重用地和不可见地完成这一操作。

Monad变形金刚是否执行此功能,即使用外部monad的绑定函数组合内部monad的绑定函数?或者我在这里需要一些其他的控制结构吗?

1 个答案:

答案 0 :(得分:1)

我认为你不能在这里比功能应用程序轻得多。回答你的直接问题:

  1. 是的,monad变换器组合了变换器和底层monad的绑定功能。
  2. 不,一般来说,你不能组合两个monad的绑定函数并生成另一个monad的绑定函数。
  3. 但我不认为这两个直接答案中的任何一个都很重要,因为getAlias不太可能是任何守法单身的约束。 (至少,绑定函数必须是非常多态的,getAlias不是!)。