謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

compose


template chain(alias a,alias b){
typeof(b(U)) chain(U)(U arg){return b(a(arg));};
}
unittest{
auto inc=delegate uint(uint i){return i+1;};
auto toString=delegate char[](uint i){return std.string.toString(i);};
writefln(chain!(inc,toString)(12));
// auto func=&chain!(inc,toString)!(uint);//これがエラーになる。
// auto func=&chain!(inc,toString).chain!(uint);//これもエラーになる。
// writefln(func(12));
}
個人的にchainと呼んでるけどcomposeと同じはず。
テンプレートパラメタにdelegateやfunctionが指定できないのでaの一つ目の引数の型を知る事が出来ないのと型チェック周りでも問題あり。特に前者は構文解析のバグのせいもあって致命的。