Есть ли "полный" набор функций / операторов для FRP?

Функциональное реактивное программирование - это подход к определению побочных программ чисто функциональным способом.

Недавно я использовал rxscala, который является портом порта Java/Scala ReactiveX. Он основан на концепции Observables, которые можно рассматривать как потоки значений определенного типа.

Для этого вопроса я хочу исключить подходы FRP, которые обрабатывают непрерывные изменения (сигналы).

Создание новых Обсерваторий из старых

Эти наблюдаемые могут быть объединены с использованием множества различных функций для создания новых наблюдаемых. Они похожи на функции, которые можно применять к коллекциям. И это уже достаточно хорошо понято, как мы знаем Foldable, Traversable, Applicative, Monads и тому подобное.

Действительно, наблюдаемые - это складные, проходимые монады, как обычные коллекции. Но эти признаки могут быть реализованы несколькими способами для наблюдаемых, так как наблюдаемая содержит гораздо больше информации (информация о времени для каждого элемента), чем обычная коллекция. И результат также должен быть снабжен информацией о времени.

Две реализации Monad

Например монадический join (flatMap в Scala) могут быть реализованы по крайней мере двумя различными, вероятными способами:

Ограничения

Я очень доволен предоставленным репертуаром функций комбинатора, но я продолжаю сталкиваться с ситуациями, когда я не могу достичь того, чего хочу, и мне приходится прибегать к некоторому параллельному программированию.

Пропали комбинаторы или мозги?

Теперь мне интересно, слишком ли я глуп, чтобы строить желаемое поведение, используя существующие комбинаторы. Или это тот случай, когда функции комбинатора, доступные в rxscala, недостаточны для создания любого мыслимого поведения?

Вопрос

Я прошу доказательства того, что какой-то базовый набор комбинационных функций B достаточно создать "все мыслимые наблюдаемые" из некоторых входных наблюдаемых.

Возможно, самой сложной частью может быть определение "все мыслимые наблюдаемые". Возможно сообщество Haskell произвело что-то подобное?

1 ответ

Проверьте это сообщение в блоге и это видео. Там Барт де Смет предлагает минимальный набор операций, который может построить любой другой оператор. Я думаю, из соображений производительности, вероятно, не следует пытаться реализовать каждый оператор с помощью основных операторов, но для некоторых это интересное упражнение.

Другие вопросы по тегам