La composition des fonctions Haskell est-elle une instance du modèle architectural de tuyau et de filtre

9

Le modèle architectural de tuyau et de filtre est défini comme une chaîne d'éléments de traitement, disposée de telle sorte que la sortie de chaque élément soit l'entrée du suivant . Chaque exemple semble considérer la connexion inter-processus ou inter-thread effectuée via une sorte de tampon partagé.

Pour moi, il semble que la composition des fonctions de Haskell effectue la même tâche. Pouvons-nous dire qu'il s'agit d'une instance de ce modèle même s'il s'agit simplement de l'ordre des fonctions et qu'aucun tampon explicite n'est utilisé comme canal? Si oui, pouvons-nous dire la même chose pour un langage non paresseux?

authchir
la source

Réponses:

8

Ils sont connectés, mais la connexion est l'inverse (en quelque sorte).

La composition du morphisme dans une catégorie appropriée modélise avec précision à la fois la composition des fonctions (où la catégorie est Setpour un langage strict et CPOpour un langage paresseux) et la composition du processus (où la catégorie est la catégorie (AFAIK, sans nom) où les objets sont des chaînes, les morphismes sont des coquilles processus, et la composition est l'opérateur du tuyau). Les processus shell peuvent être vus, sans perte de généralité ou de précision, car les fonctions (paresseuses) de type String -> WriterT String IO String, et les fonctions pures de type String -> Stringpeuvent être converties sans perte vers et depuis les fonctions de type String -> Identity String, donc les deux sont vraiment juste (>>=)déguisés.

Flamme de Ptharien
la source
1
Qu'est-ce qu'une CPOcatégorie? Mon google-fu est faible :(
Andres F.
3
@AndresF. La catégorie de Complete PArtial Ordonnances.
Flame de Ptharien le
2

Il existe une différence. Les tuyaux et les filtres traitent des données et des connexions de données, tandis que Haskell Function Composition traite des fonctions de première classe . Les fonctions de première classe sont composables de manière différente des tuyaux et des filtres.

Lectures complémentaires
Que signifie la composabilité dans le contexte de la programmation fonctionnelle?

Robert Harvey
la source
1
La composition ne traite pas nécessairement de la fonction de première classe autant que la composition est elle-même une fonction de première classe. Prenons par exemple la composition de la fonction ++, où la composition est ., ++ . ++prendrait une valeur et retournerait cette valeur incrémentée deux fois, mais ce ++n'est pas une fonction de première classe, elle prend seulement une valeur et retourne une valeur. La fonction de composition est la fonction de première classe qui prend deux fonctions et en retourne une.
Jimmy Hoffa
1
@JimmyHoffa, je pense que vous confondez la notion de «fonction de première classe» avec celle de «fonction d'ordre supérieur». Lorsqu'un langage a des «fonctions de première classe», il traite les fonctions de la même manière qu'il traite les autres types de données de première classe; elles peuvent être transmises à des fonctions et renvoyées par elles, stockées dans des structures de données, etc. Une fonction d'ordre supérieur tire parti de la nature de première classe des fonctions en prenant des paramètres de fonction et / ou en renvoyant des valeurs de fonction.
Levi Pearson
@LeviPearson ouais, j'ai dû accidentellement mettre mon cerveau de côté quand je me suis levé le matin où j'ai écrit ce commentaire. Si vous continuez à fouiner ici pour écrire du bon contenu pour P.SE, réfléchissez au ralenti dans le chat général de P.SE
Jimmy Hoffa