Является ли простой указатель вместе с обычными операциями & amp; а * монада?

Тип конструктора:

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; }

Законы монады

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

0

Решение

Указатель на T является монадой над ссылками T, а не над T; необязательный T является монадой над T.

Это различие важно, если оно отсутствует в функциональных языках. Ссылки имеют время жизни, а указатели следуют за этим временем жизни.

Я согласен с тем, что отсутствие функций, соответствующих традиционным именам, является неважной деталью; векторное пространство остается векторным пространством, даже если оператор двоичного сложения не обозначен +До тех пор, пока это доступно из контекста.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]