Определение функции mconcat:
mconcat :: Monoid a => [a] -> a
mconcat = foldr mappend mempty
Реализация foldr:
template<typename F, typename T>
decltype(auto) foldr(F, T arg) { return arg; }
template<typename F, typename T, typename ...Ts>
decltype(auto) foldr(F f, T init, T head, Ts ...tail)
{
return f(head, foldr(f, init, tail...));
}
Реализация mconcat:
template<typename T, typename ...Ts>
decltype(auto) mconcat(T head, Ts ...tail)
{
return foldr(&mappend<T>, mempty<T>(), head, tail...);
}
Можно ли вместо функции foldr использовать fold-expressions? В описании указан необходимый вариант свертки - правая, с бинарным оператором, однако, я не могу придумать, каким образом можно заменить его на вызов функции mappend, или, наоборот, как реализовать wrapper для mappend так, чтобы его можно было использовать как бинарный оператор.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Используя библиотеки QNetworkReply и QNetworkAccessManager я скачалexe файл, но не понимаю как его открыть
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Столкнулся с непониманием названий имен классов в CSS3Сейчас смотрю видео с версткой, человек задает имя класса: class = "get-started-btn menu-link"