std::bind1st, std::bind2nd(をカリー化したもの)の型はこんなかんじ
bind1st: binary_function<T1, T2, R> -> T1 -> unary_function<T2, R>
bind2nd: binary_function<T1, T2, R> -> T2 -> unary_function<T1, R>
OCamlで書くと
bind1st = fun f x -> fun y -> f x y
bind2nd = fun f y -> fun x -> f x y