vim script でカリー化

ふと、思いついたので書いてみた。

[ソース]

function! s:plus1(b)
    return 1 + a:b
endfunction

function! s:plus2(b)
    return 2 + a:b
endfunction

function! s:plus3(b)
    return 3 + a:b
endfunction

function! s:plus(a, b)
    return a:a + a:b
endfunction

function! s:curry(func, a)
    return function(a:func.a:a)
endfunction

function! s:main()
    echo s:curry("s:plus", 1)(2)
    echo s:curry("s:plus", 3)(6)
endfunction
call s:main()

[出力]

3
9

関数名に直接値を記述して適用しています。
ここまで来ると Boost.PP の黒魔術を使っているような感じですね。
数値以外には使えそうにないですが、さて。