2017-04-10 9 views
0

型コンストラクタ:Tへプレーンポインタは、通常の操作&と*と一緒にモナドですか?

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; 
+2

'unit'が左辺値参照を取らない場合、変数ハットへのポインタはもう存在しません。 – NathanOliver

+1

'unit = std :: addressof'?型コンストラクタ= 'std :: add_pointer_t'? –

+1

'template とは何ですか? – aschepler

答えて

2

ポインタはT REFERE上モナドでありますT以上ではないnces;オプションのTはTの上のモナドです。

この区別は、機能的な言語では欠落している場合は重要です。参照には生涯があり、ポインタはそれらの生涯に従います。

私は伝統的な名前と一致する機能の欠如が重要ではないことに同意します。文脈から利用できる限り、2進加算演算子が+と示されていなくても、ベクトル空間はベクトル空間のままである。

+0

答えをありがとう。私はモナド(適切な数学的背景がない)を把握するのに苦労しており、C言語との比較は貴重です。 – Vorac

関連する問題