Реализация функции mconcat c использованием fold expressions

81
09 июля 2021, 06:40

Определение функции 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 так, чтобы его можно было использовать как бинарный оператор.

READ ALSO
Как открыть скачанный .ехе файл?

Как открыть скачанный .ехе файл?

Используя библиотеки QNetworkReply и QNetworkAccessManager я скачалexe файл, но не понимаю как его открыть

111
В браузере не выводится HTML [закрыт]

В браузере не выводится HTML [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

82
Имя класса CSS3

Имя класса CSS3

Столкнулся с непониманием названий имен классов в CSS3Сейчас смотрю видео с версткой, человек задает имя класса: class = "get-started-btn menu-link"

84