Это всё вполне можно было бы выводить, и программы получались бы гораздо локаничнее, и в то же время проверялись бы компилятором. Но до этого как-то не додумались/не взялись/хотят всё прописывать явно. Что само по себе странно, учитывая, например, что в Хаскеле не стесняются делать функции анонимными.
Ну если вы функции анонимными делаете, то почему типы не разрешаете?
Как не додумались? А как же boost::hana?