Monadic编码风格?

时间:2014-06-18 20:34:52

标签: scala coding-style monads

我发现自己编写的程序越来越像这样:

myList
  .map(el => ...)
  .filter(_....)
  .map { el =>
    ...
    ...
  }
  .zipWithIndex
  .foreach(println)

我的子程序通常完全由这样的代码块组成。我从来没有打算将我的编码风格改为这个,它只是在我越来越多地使用Scala时自然而然地发生了。

说这样的代码用" monadic style"?是否正确?我对monad是什么有一个模糊的理解,我在这里使用Scala的集合,这些似乎是monadic类型。另一方面,我不是自己创建任何monadic类型,我只是使用它们。换句话说,当我只想说我以take_something.change_it.change_it.use_it风格编程时,是否可以将其称为" monadic style"?

1 个答案:

答案 0 :(得分:3)

我会说编程就是使用monad的结果,但我只是将它描述为完全编程的monadic风格,如果你真的依赖monad编程完全没有副作用,使用IO monadsState monads之类的内容。您最终会得到一大堆嵌套(而不是链接的)mapflatMapfilter s。 Scala for...yield构造有助于组织与多个嵌套monad一起使用的代码。您可能会发现这本书Functional Programming in Scala很有趣,因为我真的很喜欢这种风格。

在一个monadic类型中使用链式转换的较小意义上,你的例子肯定是monadic。这种模式在很多代码中使用,我不一定要描述为" monadic",有时称为method cascadingfluent pattern