unit 函数把参数 x 变成了 (int, str) 构成的 tuple. 接下来的 bind 函数调用了他的参数 f 函 数, 同时把结果累加到了形参 t 上....这种方法避免了第一种方法的缺点, 因为所有的胶水代码都在 bind 函数中, 当我们要添加一个新的 函数的时候, 只需要接着链式调用就可以了.
print(bind(bind(bind(bind(unit...引入 Monad
正如我们在上面的例子中看到的一样, 直接的方法会有一些让人不悦的副作用 -- 丑陋的胶水代码, 多次检查 Null/None 等等....最后, 重复调用bind显然也是丑陋的, 我们可以定义一个函数来辅助操作.
def pipeline(e, *fns):
for fn in fns:
e = bind(e, fn..., f3, f4)
结论
Monad 是函数组合的一种简单又强大的设计模式.