Existem muitos idiomas funcionais: mônadas, aplicativos, setas, etc. Eles são documentados em artigos diferentes, mas infelizmente não conheço nenhum livro ou artigo onde estejam resumidos em um só lugar (há Typeclassopedia, mas tem muitos de áreas que não estão bem cobertas). Alguém pode recomendar um artigo / livro que os cubra bem em um lugar e que possa ser acessível a um programador com habilidades intermediárias em FP?
scala
haskell
functional-programming
monads
Konstantin Solomatov
fonte
fonte
Respostas:
Minha sugestão é, se você quiser aprender Scala, leia o livro de Paul Chiusano e Runar Bjarnason:
http://manning.com/bjarnason/
Parte II: Design funcional e bibliotecas combinadoras
Parte III: Padrões de design funcional
Parte IV: Quebrando as regras: efeitos e I / O
fonte
Desculpe, não sei de artigos ou livros que cobrem em detalhes os diferentes usos para todas essas construções, mas posso fornecer alguns links para recursos individuais.
Um padrão bastante comum é construir transformadores de mônadas em vez de mônadas simples (veja também o link no próximo parágrafo). Basicamente, significa que você constrói algo que deve ser combinado com outras mônadas, resultando em uma mais complexa, capaz de lidar com as características de ambas.
No Real World Haskell, existem alguns capítulos sobre mônadas. No Capítulo 14. Mônadas, os autores explicam os fundamentos e alguns usos comuns (talvez, lista, estado). O Capítulo 15. Programando com mônadas fornece mais explicações sobre como usá-las efetivamente (também cobre a mônada do leitor). O capítulo seguinte explica como usar o Parsec , mas pode ser mais interessante pesquisar artigos sobre como ele realmente funciona: deve ser um bom exemplo de um uso bem organizado de mônadas para análise. Fianlly, Capítulo 18. Transformadores de mônadaapresenta como funcionam os transformadores de mônada e, em seguida, mostra como construir um, passo a passo. As considerações para as seções finais do capítulo também são interessantes.
Eu li uma vez uma pergunta realmente interessante no SO sobre o uso criativo das mônadas . Os links propostos foram ótimas leituras sobre o assunto. Com esse espírito, tentei perguntar o mesmo para as flechas : definitivamente obtive menos respostas do que as das mônadas, mas mesmo assim interessantes.
Com relação aos padrões OOP pelo grupo de quatro, há um bom conjunto de 3 artigos da IBM sobre o tópico em sua série Pensamento funcional . A linguagem funcional de destino é Scala. Eles continuam explicando os padrões de design usuais em OOP e mostrando como eles são mapeados no Scala.
O artigo mais relevante para a sua pergunta é com certeza o primeiro, mas os outros dois podem ser leituras interessantes relacionadas.
fonte
Jeremy Gibbons tem um blog Patterns in FP que está destinado a se tornar o livro que você está pedindo. Claro, isso ainda não está em condições de ser tão útil quanto você gostaria agora, mas ele merece algum encorajamento!
Enquanto isso, direi +1 para a Typeclassopedia de Brent Yorgey. É muito útil, e se houver partes posteriores que confundam, este site é um bom lugar para ir até o fundo delas. Eu sei que Brent mantém tudo sob revisão. Se ele não estiver alcançando seus leitores, ajude-o.
fonte
Muitas coisas de FP são publicadas no site de Oleg: http://okmij.org/ftp/
Apresentação sobre padrões de FP de Josh Suereth: http://jsuereth.com/intro-to-fp/
fonte
Você leu os últimos capítulos de Aprenda um Haskell para o Grande Bem ?
O Capítulo 6 cobre mapas e dobras, que são dois dos mais importantes "padrões de projeto" em linguagens funcionais.
Os capítulos 11-13 cobrem funções, funções aplicativas e mônadas, nessa ordem. Isso é útil - muitos tutoriais introduzem Functors e, em seguida, Monads e, em seguida, acrescentam Functors Aplicativos no final (se eles abordarem todos). A ordem em LYAH é melhor, porque mover-se de Functores => Funções Aplicativas => Mônadas o move gradualmente para cima na escada da generalidade e do poder.
O Capítulo 14 cobre os Zíperes - você pode efetivamente pensar neles como classes de contêiner com um ponteiro para um dado específico, o que significa que você obtém acesso O (1) e atualiza na localização do ponteiro.
Não cobre Arrows ou Comonads, que são um tópico mais avançado em Haskell. Para entender como e por que usar Arrows ou Comonads, você definitivamente já deve ter um bom domínio das Mônadas, então não acho que isso seja um problema - LYAH está firmemente voltado para o segmento iniciante do mercado de Haskell.
fonte