是普通的指针,以及通常的操作&和*,monad?

时间:2017-04-10 12:36:08

标签: c++ monads

类型构造函数:

template< typename T > T*;

单位操作员

template< typename T > T* unit( T /*or T&*/ t ) { return &t; }

绑定操作符

template< typename A, typename B >
B* bind( A a, std::function<b*(a)> f )
{ return a ? f(a) : nullptr; }

Monad法律

bind( unit(x), f ) === f(x)
bind( bind(x, f1), f2 ) === auto a = f1(x); auto b = f2(a); return b;

1 个答案:

答案 0 :(得分:2)

指向T的指针是T引用上的monad而不是T;一个可选的T是一个超过T的monad。

如果缺少函数式语言,这种区别很重要。引用具有生命周期,指针遵循这些生命周期。

我同意缺乏与传统名称相匹配的功能是一个不重要的细节;即使二进制加法运算符未表示为+,向量空间仍然是向量空间,只要它可以从上下文中获得。

相关问题