Czy kompozycja funkcji Haskell jest przykładem wzorca architektonicznego rur i filtrów

9

Wzorzec architektoniczny rur i filtrów definiuje się jako łańcuch elementów przetwarzających, ułożonych w taki sposób, że wyjście każdego elementu stanowi wejście następnego . Każdy przykład wydaje się rozważać połączenie międzyprocesowe lub między wątkami realizowane przez pewnego rodzaju bufor współdzielony.

Wydaje mi się, że kompozycja funkcji Haskella wykonuje to samo zadanie. Czy możemy powiedzieć, że jest to instancja tego wzorca, nawet jeśli chodzi tylko o porządkowanie funkcji i nie ma jawnego bufora używanego jako potok? Jeśli tak, to czy możemy powiedzieć to samo w przypadku leniwego języka?

authchir
źródło

Odpowiedzi:

8

Są połączone, ale połączenie jest odwrotne (w pewnym sensie).

Kompozycja morfizmu w odpowiedniej kategorii dokładnie modeluje zarówno kompozycję funkcji (gdzie kategoria dotyczy Setjęzyka ścisłego i CPOleniwego), jak i kompozycję procesu (gdzie kategoria jest (AFAIK, nienazwana) kategoria, w której obiekty są łańcuchami, morfizmy są powłoką procesy, a skład jest operatorem potoku). Procesy powłoki można zobaczyć, bez utraty ogólności lub dokładności, jako (leniwe) funkcje typu String -> WriterT String IO String, a czyste funkcje typu String -> Stringmożna bezstratnie konwertować na i z funkcji typu String -> Identity String, więc oba są tak naprawdę tylko (>>=)maskowaniem.

Płomień Pthariena
źródło
1
Co to jest CPOkategoria? Moje google-fu jest słabe :(
Andres F.,
3
@AndresF. Kategoria Cniekompletnych Prderów artystycznych O.
Ptharien's Flame
2

Jest różnica. Rury i filtry radzą sobie z danymi i połączeniami danych, podczas gdy Haskell Function Composition zajmuje się pierwszorzędnymi funkcjami . Funkcje pierwszej klasy można komponować w sposób, w jaki nie są to potoki i filtry.

Dalsza lektura
Co oznacza kompozycyjność w kontekście programowania funkcjonalnego?

Robert Harvey
źródło
1
Kompozycja niekoniecznie zajmuje się funkcją pierwszej klasy, ponieważ sama kompozycja jest funkcją pierwszej klasy. Weźmy na przykład skład funkcji ++, gdzie skład jest ., ++ . ++wziąłby wartość i zwrócił tę wartość inkrementowaną dwukrotnie, ale ++nie jest funkcją pierwszej klasy, przyjmuje tylko wartość i zwraca wartość. Funkcja kompozycji jest funkcją pierwszej klasy, która przyjmuje dwie funkcje i zwraca jedną.
Jimmy Hoffa,
1
@ JimmyHoffa, myślę, że mylisz pojęcie „funkcji pierwszej klasy” z „funkcją wyższego rzędu”. Gdy język ma „funkcje pierwszej klasy”, traktuje funkcje tak samo, jak inne typy danych pierwszej klasy; można je przekazywać i zwracać z funkcji, przechowywać w strukturach danych itp. Funkcja wyższego rzędu wykorzystuje pierwszorzędny charakter funkcji, pobierając parametry funkcji i / lub zwracając wartości funkcji.
Levi Pearson,
@LeviPearson tak, musiałem przypadkowo położyć mózg na bok, kiedy wstałem rano, kiedy napisałem ten komentarz. Jeśli masz zamiar zachować grzebie się tutaj pisanie dobrych treści P.SE, rozmyślać na biegu jałowym w P.SEs ogólny czat
Jimmy Hoffa