Relacionamentos.
Amigo: Dadas duas pessoas, um relacionamento de amigo segue estas leis gerais
- Tenha boa vontade um com o outro
- Acha que os outros são amigos deles (então as leis devem ser cumpridas pelos dois membros nesse relacionamento)
- Gosta de passar tempo juntos
Monóide: dados vários itens e uma função que pega 2 dos itens e retorna 1, um relacionamento monoidal segue estas leis gerais
- Há um desses itens (apenas um, chamado identidade) que passou para a função com qualquer outro item garantirá que a função sempre retorne o outro item (0 + 1 = 1, portanto, 0 é a identidade quando os itens são números e o função é adição)
- A função não pode operar ou devolver itens que não estão no conjunto com uma relação monoidal com
- A função é associativa e pode ser usada com os itens de maneira um tanto independente da ordem, ou seja, a * (b * c) = (a * b) * c que diz que você pode multiplicar a pelo resultado de b * c ou c pelo resultado de a * be o resultado será o mesmo que você fizer primeiro.
A programação funcional é sobre generalizações, o amigo é um relacionamento muito geral que pode ser visto em vários cenários, mas em todos os vários formatos geralmente segue as leis acima.
Reconhecendo as leis que governam os relacionamentos entre as coisas, você pode criar implementações gerais que funcionam em qualquer formato de coisas que possua esse tipo de relacionamento. Na programação funcional, você tenta identificar os relacionamentos entre as coisas, para que elas possam ser classificadas e tratadas em geral.
Você quer uma metáfora do mundo real? Veja como as coisas estão relacionadas e tente identificar leis gerais (como aplicável a vários cenários em que outras coisas que não as leis podem variar). Existe um relacionamento entre um registrador e um comprador em uma loja, ele possui algumas leis gerais, um software foi desenvolvido para facilitar os objetivos das pessoas nesse relacionamento geral na forma de sistemas POS. Da mesma forma, quando você começa a ver essas leis gerais determinando como as coisas estão relacionadas, pode começar a confiar nas leis desses relacionamentos ao escrever seu software, em vez dos detalhes específicos de uma instância de um relacionamento.