ふつける読んでからというもの

ここのところ、ちらほらと「あーこれHaskellなら…」とか考えるようになった。しかし会社で例えば、

// 多分Maybeなコード
using boost::optional;
using boost::result_of;
using boost::bind;

// >>=は右結合で()書くのが面倒なので>=にした
template<typename T, typename F>
typename result_of<F(T)>::type operator>=(optional<T> const & maybe, F f) {
    return if (maybe) f(*val); else typename result_of<F(T)>::type();
}

optional<Bar> makeBar(Foo const & foo, int);
optional<Baz> doSomething(Bar const & bar);

if (optinal<Baz> maybeBaz  = optional<Foo>(Foo()) >= bind(makeBar, _1, 1) >= doSomething) {
    cout << "できたよ : " << *maybeBaz << endl;
}

みたいなコードを書いても「変なコード書くな」とか言われるか、それとも今のところ誰もコードをチェックしてないので、メンテする人が困るかも知れない(自分がメンテするのなら特に困らないが)。あと上のコードはコンパイルすらしていない。名前とかからなんとなく察してあげてください。

追記:いくらコンパイルしてないとは言えあからさまに戻り値型を間違えているのを放置するのはアレなので修正。