Ist die Zusammensetzung der Haskell-Funktion eine Instanz des Pipe & Filter-Architekturmusters?


9

Das Pipe & Filter-Architekturmuster ist als eine Kette von Verarbeitungselementen definiert , die so angeordnet sind, dass die Ausgabe jedes Elements die Eingabe des nächsten ist . In jedem Beispiel scheint eine prozess- oder threadübergreifende Verbindung zu berücksichtigen, die über eine Art gemeinsam genutzten Puffer ausgeführt wird.

Mir scheint, dass die Zusammensetzung der Haskell-Funktion dieselbe Aufgabe erfüllt . Können wir sagen, dass es sich um eine Instanz dieses Musters handelt, auch wenn es nur um die Funktionsreihenfolge geht und kein expliziter Puffer als Pipe verwendet wird? Wenn ja, können wir dasselbe für nicht faule Sprache sagen?

Antworten:


8

Sie sind verbunden, aber die Verbindung ist umgekehrt.

Die Morphismuszusammensetzung in einer geeigneten Kategorie modelliert genau sowohl die Funktionszusammensetzung (wobei die Kategorie Setfür eine strenge Sprache und CPOfür eine faule Sprache ist) als auch die Prozesszusammensetzung (wobei die Kategorie die (AFAIK, unbenannte) Kategorie ist, in der die Objekte Zeichenfolgen sind, Morphismen sind Shell Prozesse und Zusammensetzung ist der Rohrbetreiber). Shell-Prozesse können ohne Verlust der Allgemeinheit oder Genauigkeit als (faule) Funktionen des Typs angesehen werden String -> WriterT String IO String, und reine Funktionen des Typs String -> Stringkönnen verlustfrei in und von Funktionen des Typs konvertiert werden String -> Identity String, sodass beide wirklich nur (>>=)getarnt sind.


1
Was ist eine CPOKategorie? Mein Google-Fu ist schwach :(
Andres F.

3
@AndresF. Die Kategorie der Cvollständigen Pkünstlichen ORender.
Ptharien Flamme

2

Da ist ein Unterschied. Pipes und Filter befassen sich mit Daten und Datenverbindungen, während sich Haskell Function Composition mit erstklassigen Funktionen befasst . Erstklassige Funktionen lassen sich so zusammensetzen, wie es Pipes und Filter nicht tun.

Weiterführende Literatur
Was bedeutet Composability im Kontext der funktionalen Programmierung?


1
Komposition befasst sich nicht unbedingt mit erstklassiger Funktion, sondern Komposition ist selbst eine erstklassige Funktion. Nehmen wir zum Beispiel, die Zusammensetzung der Funktion ++, in der sich die Zusammensetzung befindet ., ++ . ++würde einen Wert annehmen und diesen Wert inkrementell zurückgeben, ++ist jedoch keine erstklassige Funktion, sondern nimmt nur einen Wert an und gibt einen Wert zurück. Die Kompositionsfunktion ist die erstklassige Funktion, die zwei Funktionen übernimmt und eine zurückgibt.
Jimmy Hoffa

1
@ JimmyHoffa, ich denke, Sie verwechseln den Begriff "erstklassige Funktion" mit "Funktion höherer Ordnung". Wenn eine Sprache über erstklassige Funktionen verfügt, werden Funktionen genauso behandelt wie andere erstklassige Datentypen. Sie können an Funktionen übergeben und von diesen zurückgegeben, in Datenstrukturen usw. gespeichert werden. Eine Funktion höherer Ordnung nutzt die erstklassige Natur von Funktionen, indem sie Funktionsparameter verwendet und / oder Funktionswerte zurückgibt.
Levi Pearson

@ LeviPearson Ja, ich muss versehentlich mein Gehirn zur Seite gelegt haben, als ich an dem Morgen aufgestanden bin, an dem ich diesen Kommentar geschrieben habe. Wenn Sie hier weiter herumstöbern und gute Inhalte für P.SE schreiben möchten, denken Sie darüber nach, wie Sie im allgemeinen Chat von
Jimmy Hoffa,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.