C++ の lambda 式は、本質的には operator()() を実装していて型名をコンパイラのみが指定可能であるような class に過ぎないので、当然 auto で受けられるしむしろユーザは型名を指定できないから auto を使うしかない
引数を auto で受ける多相の lambda も、結局のところ template<...> Foo operator()() を持つような型にすぎないので、その辺りの展開後コードを想像できていれば ML の let 多相と混同するようなことはないはず
ジェネリックラムダ - cpprefjp C++日本語リファレンス
https://cpprefjp.github.io/lang/cpp14/generic_lambdas.html