functional-programming - monad 有流畅的接口(interface)吗?

标签 functional-programming monads fluent-interface

如果这个问题看起来很愚蠢,请原谅我,但我对函数式编程的整个世界都很陌生,所以我需要一些 StackOverflow 上的居民来让我直截了当。

据我所知,对 monad 的操作会返回一个 monad。这是否意味着 monad 有一个流利的接口(interface),因此应用于 monad 的每个函数在对它包装的变量应用一些操作后返回该 monad?

最佳答案

大概您指的是与 monads 关联的绑定(bind)运算符,其中可以从一个 monadic 值开始,将其绑定(bind)到一个 monadic 函数,并以另一个 monadic 值结束。这很像一个返回“this”指针或引用的“流利方法”(或一组这样的“流利接口(interface)”),是的,但是你会错过的是单子(monad)函数不需要返回与输入值相同类型的一元值。流畅的方法约定是返回相同类型的值,以便继续链接在正在准备的实例(或多个实例)上都有效的调用。

一元绑定(bind)运算符签名看起来更像这样:

M[a] -> (a -> M[b]) -> M[b]

也就是说,“返回值”的类型可能与第一输入值的类型不同。仅当提供的函数具有类型时才相同
(a -> M[a])

这一切都取决于一元函数的类型——更具体地说,是一元函数的返回类型。

如果您要将您接受的单子(monad)函数的域限制为那些返回与提供给绑定(bind)运算符的单子(monad)值相同类型的函数,那么是的,您将拥有类似于流利接口(interface)的东西。

关于functional-programming - monad 有流畅的接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438338/

相关文章:

functional-programming - 如何从列表中删除给定的符号?

function - 如何在 Swift 中创建 _inline_ 递归闭包?

macros - 如果 Lisp 中的宏是一元的,这意味着什么?

fluent - 有流畅的接口(interface)吗?

scala - 为什么 Scala 没有 IO Monad?

testing - 是否有与 QuickCheck 一起使用的 Arbitrary 的单子(monad)版本?

Haskell 列表 monad 循环

haskell - 使用 Haskell 状态 monad 有代码味道吗?

java - 如何在 Java 中实现具有继承性的 Fluent Builder

c# - C# 中的流畅接口(interface)和继承