¿Es la composición de la función Haskell una instancia del patrón arquitectónico de tuberías y filtros?

9

El patrón arquitectónico de tubería y filtro se define como una cadena de elementos de procesamiento, dispuestos de modo que la salida de cada elemento sea la entrada del siguiente . Cada ejemplo parece considerar la conexión entre procesos o entre hilos realizada a través de algún tipo de búfer compartido.

Para mí, parece que la composición de la función Haskell está realizando la misma tarea. ¿Podemos decir que es una instancia de este patrón incluso si solo se trata de ordenar funciones y no se utiliza un buffer explícito como canalización? En caso afirmativo, ¿podemos decir lo mismo para el lenguaje no perezoso?

authchir
fuente

Respuestas:

8

Están conectados, pero la conexión es al revés (más o menos).

La composición de morfismo en una categoría apropiada modela con precisión tanto la composición de funciones (donde la categoría es Setpara un lenguaje estricto y CPOpara un lenguaje vago) como la composición de procesos (donde la categoría es la categoría (AFAIK, sin nombre) donde los objetos son cadenas, los morfismos son concha procesos, y la composición es el operador de tubería). Los procesos de Shell se pueden ver, sin pérdida de generalidad o precisión, como funciones de tipo (perezosas) String -> WriterT String IO String, y las funciones de tipo puras String -> Stringse pueden convertir sin pérdidas hacia y desde funciones de tipo String -> Identity String, por lo que ambas están realmente (>>=)disfrazadas.

Llama de Ptharien
fuente
1
¿Qué es una CPOcategoría? Mi google-fu es débil :(
Andres F.
3
@AndresF. La categoría de Crders Partiales completos O.
Llama de Ptharien
2

Hay una diferencia. Las tuberías y los filtros se ocupan de los datos y las conexiones de datos, mientras que Haskell Function Composition se ocupa de las funciones de primera clase . Las funciones de primera clase son componibles de manera que las tuberías y los filtros no lo son.

Lecturas adicionales
¿Qué significa la componibilidad en el contexto de la programación funcional?

Robert Harvey
fuente
1
La composición no se ocupa necesariamente de una función de primera clase, sino que la composición es en sí misma una función de primera clase. Tomemos, por ejemplo, la composición de la función ++, donde está la composición ., ++ . ++tomaría un valor y devolvería ese valor incrementado dos veces, pero ++no es una función de primera clase, solo toma un valor y devuelve un valor. La función de composición es la función de primera clase que toma dos funciones y devuelve una.
Jimmy Hoffa
1
@JimmyHoffa, creo que estás confundiendo la noción de 'función de primera clase' con 'función de orden superior'. Cuando un lenguaje tiene 'funciones de primera clase', trata las funciones de la misma manera que trata otros tipos de datos de primera clase; pueden pasarse y devolverse desde funciones, almacenarse en estructuras de datos, etc. Una función de orden superior aprovecha la naturaleza de primera clase de las funciones tomando parámetros de función y / o devolviendo valores de función.
Levi Pearson
@LeviPearson, sí, debo haber puesto accidentalmente mi cerebro de lado cuando me levanté la mañana en que escribí ese comentario. Si vas a seguir hurgando por aquí escribiendo buen contenido para P.SE, ponte a ralentí en el chat general de P.SEs
Jimmy Hoffa