La composizione della funzione Haskell è un'istanza di pattern architettonico di condutture e filtri

9

La pipe & il pattern architettonico del filtro è definito come una catena di elementi di elaborazione, disposti in modo tale che l'output di ciascun elemento sia l'input del successivo . Ogni esempio sembra considerare la connessione tra processi o inter-thread eseguita attraverso una sorta di buffer condiviso.

Per me, sembra che la composizione della funzione Haskell stia eseguendo lo stesso compito. Possiamo dire che è un'istanza di questo modello, anche se si tratta solo di ordinare le funzioni e nessun buffer esplicito viene usato come pipe? Se sì, possiamo dire la stessa cosa per un linguaggio non pigro?

    
posta authchir 13.06.2013 - 21:43
fonte

2 risposte

8

Sono connessi, ma la connessione è il contrario (sorta di).

La composizione del morfismo in una categoria appropriata modella accuratamente sia la composizione della funzione (dove la categoria è Set per un linguaggio rigoroso e CPO per un linguaggio pigro) e la composizione del processo (dove la categoria è la categoria (AFAIK, senza nome) dove gli oggetti sono stringhe, i morfismi sono processi shell e la composizione è l'operatore pipe). I processi shell possono essere visti, senza perdita di generalità o accuratezza, come funzioni (pigri) di tipo String -> WriterT String IO String e le funzioni pure di tipo String -> String possono essere convertite senza perdita da e verso funzioni di tipo String -> Identity String , quindi entrambe sono davvero solo (>>=) sotto mentite spoglie.

    
risposta data 13.06.2013 - 22:21
fonte
2

C'è una differenza. Tubi e filtri si occupano di connessioni dati e dati, mentre Haskell Function Composition si occupa delle funzioni di prima classe . Le funzioni di prima classe sono componibili in modi diversi da pipe e filtri.

Ulteriori letture
Che cosa significa componibilità nel contesto della programmazione funzionale?

    
risposta data 13.06.2013 - 22:09
fonte