A composição da função Haskell é uma instância do padrão arquitetural de tubos e filtros

9

O padrão arquitetural de tubulação e filtro é definido como uma cadeia de elementos de processamento, organizados de forma que a saída de cada elemento seja a entrada do próximo . Todo exemplo parece considerar a conexão entre processos ou entre threads executada por meio de algum tipo de buffer compartilhado.

Para mim, parece que a composição da função Haskell está executando a mesma tarefa. Podemos dizer que é uma instância desse padrão, mesmo que seja apenas sobre ordenação de funções e nenhum buffer explícito seja usado como canal? Se sim, podemos dizer a mesma coisa para linguagem não preguiçosa?

authchir
fonte

Respostas:

8

Eles estão conectados, mas a conexão é inversa (mais ou menos).

A composição do morfismo em uma categoria apropriada modela com precisão a composição da função (onde a categoria é Setpara uma linguagem estrita e CPOpara uma linguagem lenta) e a composição do processo (onde a categoria é a categoria (AFAIK, sem nome), onde os objetos são cadeias, os morfismos são conchas processos e composição é o operador do tubo). Os processos do shell podem ser vistos, sem perda de generalidade ou precisão, como funções (preguiçosas) do tipo String -> WriterT String IO String, e funções puras do tipo String -> Stringpodem ser convertidas sem perdas para e a partir de funções do tipo String -> Identity String, portanto, ambas são realmente (>>=)disfarçadas.

Chama de Ptharien
fonte
11
O que é uma CPOcategoria? Meu google-fu é fraco :(
Andres F.
3
@AndresF. A categoria de Cordens Partificiais Oincompletas.
Chama de Ptharien
2

Há uma diferença. Canos e filtros lidam com dados e conexões de dados, enquanto a Composição da Função Haskell lida com funções de primeira classe . Funções de primeira classe são compostas de maneiras que tubos e filtros não são.

Leitura adicional
O que significa composibilidade no contexto da programação funcional?

Robert Harvey
fonte
11
A composição não lida necessariamente com a função de primeira classe, tanto quanto a própria composição é uma função de primeira classe. Tomemos, por exemplo, a composição da função ++, onde está a composição ., ++ . ++pegaria um valor e retornaria esse valor incrementado duas vezes, mas ++não é uma função de primeira classe, apenas recebe um valor e retorna um valor. A função de composição é a função de primeira classe que recebe duas funções e retorna uma.
Jimmy Hoffa
11
@ JimmyHoffa, acho que você está confundindo a noção de 'função de primeira classe' com 'função de ordem superior'. Quando um idioma possui "funções de primeira classe", ele trata as funções da mesma forma que outros tipos de dados de primeira classe; elas podem ser passadas e retornadas de funções, armazenadas em estruturas de dados, etc. Uma função de ordem superior tira proveito da natureza de primeira classe das funções usando parâmetros de função e / ou retornando valores de função.
Levi Pearson
@LeviPearson sim, devo ter acidentalmente colocado meu cérebro de lado quando me levantei na manhã em que escrevi esse comentário. Se você estiver indo para manter bisbilhotando aqui escrevendo bom conteúdo para P.SE, ponderar em marcha lenta em P.SEs bate-papo geral
Jimmy Hoffa