Вот мой (в основном) жаргон и ответ без кода.
Подумайте о данных двумя способами: поток (значения, которые возникают во времени, например события) или структура (данные, существующие в определенный момент времени, например список, вектор, массив и т. Д.).
Есть определенные операции, которые вы можете выполнять над потоками или структурами. Одна из таких операций - отображение. Функция сопоставления может увеличивать каждый элемент данных (при условии, что это число) на 1, и вы, надеюсь, можете представить, как это можно применить к потоку или структуре.
Функция отображения - это всего лишь одна из класса функций, которые иногда называют «сокращающими функциями». Другой распространенной функцией сокращения является фильтр, который удаляет значения, соответствующие предикату (например, удаляет все четные значения).
Преобразователи позволяют «обернуть» последовательность из одной или нескольких сокращающих функций и создать «пакет» (который сам по себе является функцией), который работает с обоими потоками или структурами. Например, вы можете «упаковать» последовательность сокращающих функций (например, отфильтровать четные числа, затем сопоставить полученные числа, чтобы увеличить их на 1), а затем использовать этот «пакет» преобразователя либо в потоке, либо в структуре значений (или в обоих) .
Так что же в этом особенного? Как правило, редуцирующие функции не могут быть эффективно скомпонованы для работы как с потоками, так и со структурами.
Таким образом, вы можете воспользоваться своими знаниями об этих функциях и применить их к большему количеству вариантов использования. Цена для вас состоит в том, что вы должны изучить некоторые дополнительные механизмы (например, преобразователь), чтобы дать вам эту дополнительную мощность.