coté hack me fait préférer une notation explicite.
Le côté « hack » c'est juste utiliser un symbole, comme un autre commentaire l'a montré, on peut utiliser un nom de fonction ... par exemple chain,
ce qui donne (mais qui est « moins joli »)
cat().chain(sed()).chain(etc...).chain(...)
Après, il y a d'autres avantages à encapsuler dans un objet le calcul: tu peux contrôler les actions ! Ainsi, tu peux permettre des trucs utiles dans le genre:
lancer en mode debug
définir des « variables environnement » pour le programme
construire d'autres manière de combiner les actions :
pour chaque ligne de résultat lancer une nouvelle chaine de commande et fusionner le tout (en parallèle ou non). Cette fonction serait en gros un « concatMap » sur des générateurs
exécuter une partie de code si et seulement si la première a échoué
etc ...
Quand on y regarde de plus près, on se rend compte qu'une action (cat, sed etc ...) c'est simplement une fonction de type action A : () -> [A].
On peut donc construire tout un tas de combinateurs :
chain : action A -> ([A] -> action B) -> action B qui correspond à ta version
chainEach : action A -> (A -> action B) -> action B qui lance un appel sur chaque ligne et concatène le résultat
alter : action A -> action A -> action A qui essaie la première, et si elle échoue, lance la deuxième (alternative)
fmap : (A -> B) -> action A -> action B, applique une fonction « normale » au résultat d'une action
apply : action (A -> B) -> action A -> action B (l'utilisation de celle-ci est plus anecdotique, mais on peut en trouver).
Ensuite, on peut écrire du code comme celui-ci:
# 1) sélectionne un fichier qui contient une liste de fichiersalter(cat("fichier1"),cat("fichier2"),erreur("pas de fichiers")).chainEach(readFile)# lis les fichiers un par un et concatène .chain(sed(" ... "))# applique un filtre (sur la totalité).fmap(int)# transforme chaque ligne du résultat en entier .run()# lance le véritable calcul
[^] # Re: Autres outils
Posté par Aluminium95 . En réponse au journal chaintools, outils unix avec syntaxe pythonique. Évalué à 4.
Le côté « hack » c'est juste utiliser un symbole, comme un autre commentaire l'a montré, on peut utiliser un nom de fonction ... par exemple
chain,ce qui donne (mais qui est « moins joli »)
Après, il y a d'autres avantages à encapsuler dans un objet le calcul: tu peux contrôler les actions ! Ainsi, tu peux permettre des trucs utiles dans le genre:
Quand on y regarde de plus près, on se rend compte qu'une action (
cat,sedetc ...) c'est simplement une fonction de typeaction A : () -> [A].On peut donc construire tout un tas de combinateurs :
chain:action A -> ([A] -> action B) -> action Bqui correspond à ta versionchainEach:action A -> (A -> action B) -> action Bqui lance un appel sur chaque ligne et concatène le résultatalter:action A -> action A -> action Aqui essaie la première, et si elle échoue, lance la deuxième (alternative)fmap:(A -> B) -> action A -> action B, applique une fonction « normale » au résultat d'une actionapply:action (A -> B) -> action A -> action B(l'utilisation de celle-ci est plus anecdotique, mais on peut en trouver).Ensuite, on peut écrire du code comme celui-ci: