Является ли композиция функций Haskell экземпляром архитектурного шаблона трубы и фильтра?

9

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

Мне кажется, что композиция функций Haskell выполняет ту же задачу. Можем ли мы сказать, что это экземпляр этого шаблона, даже если речь идет о порядке упорядочения функций, и в качестве канала не используется явный буфер? Если да, можем ли мы сказать то же самое для не ленивого языка?

authchir
источник

Ответы:

8

Они связаны, но связь наоборот (вроде).

Композиция морфизма в соответствующей категории точно моделирует как композицию функций (где категория предназначена Setдля строгого языка, так и CPOдля ленивого языка) и композицию процесса (где категория является категорией (AFAIK, безымянная), где объекты являются строками, морфизмы являются оболочкой процессы, и состав трубный оператор). Оболочечные процессы можно рассматривать без потери общности или точности как (ленивые) функции типа String -> WriterT String IO String, а чистые функции типа String -> Stringмогут быть без потерь преобразованы в функции типа и из них String -> Identity String, поэтому обе они на самом деле просто (>>=)замаскированы.

Пламя Птариена
источник
1
Что такое CPOкатегория? Мой гугл-фу слаб :(
Андрес Ф.
3
@AndresF. Категория Complete Partial Orders.
Пламя Птариена
2

Есть разница. Каналы и фильтры имеют дело с данными и соединениями данных, тогда как Композиция функций Haskell имеет дело с первоклассными функциями . Первоклассные функции компонуются так, как это делают каналы и фильтры.

Дальнейшее чтение
Что означает составляемость в контексте функционального программирования?

Роберт Харви
источник
1
Композиция не обязательно имеет дело с первоклассной функцией, так как сама композиция является первоклассной функцией. Возьмем, к примеру, композицию функции ++, где композиция имеет значение ., ++ . ++примет значение и вернет это значение, увеличенное вдвое, но ++не является функцией первого класса, она только принимает значение и возвращает значение. Композиционная функция является первой функцией класса, которая принимает две функции и возвращает одну.
Джимми Хоффа
1
@JimmyHoffa, я думаю, что вы путаете понятие «первоклассная функция» с «функцией высшего порядка». Когда язык имеет «первоклассные функции», он обрабатывает функции так же, как и другие первоклассные типы данных; они могут быть переданы и возвращены из функций, сохранены в структурах данных и т. д. Функция более высокого порядка использует преимущества первоклассного характера функций, принимая параметры функции и / или возвращая значения функции.
Леви Пирсон
@LeviPearson да, я, должно быть, случайно повредил мозг, когда проснулся утром, когда написал этот комментарий. Если вы собираетесь продолжать копаться здесь и писать хороший контент для P.SE, подумайте о простое в общем чате P.SEs
Джимми Хоффа