【问题标题】:Is there a kind of functor has a function (monad<A>, function A -> monad<B>) -> Monad<B>有没有一种函子有函数 (monad<A>, function A -> monad<B>) -> Monad<B>
【发布时间】:2018-07-05 21:32:53
【问题描述】:

我的代码 (Java) 中有一个模式,如下所示:

private M<State2> augmentFromDS3(M<State1> state1) {
    return state1.flatMap(this::transform1);
}


private M<State3> validatePersonType1(M<State2> state2) {
    return state2.flatMap(this::transform2);
}

private M<State2> 
transform1(State1 state1) {
}

private M<State3> 
transform2(State2 state2) {
}

还有一个叫map的版本。

感觉这里有一个以前发现过的功能模式(如 monad 转换器、comonad 等)。但是,我不知道我认为存在的那种东西叫什么名字。

【问题讨论】:

  • 这只是您已经在使用的flatMap 的类型吗?具有这种功能的函子称为 monads :-)

标签: functional-programming


【解决方案1】:

只看你问题的标题,我认为这是 Haskell(或 Scala 中的 flatMap)中 monad 的 bind (>>=) 函数:

(>>=)  :: m a -> (a -> m b) -> m b

【讨论】:

  • 这对任何感兴趣的人来说都很有趣。
猜你喜欢
  • 2012-04-07
  • 2019-07-14
  • 2020-03-03
  • 1970-01-01
  • 2012-06-26
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多