Recentemente, fui designado para trabalhar em um pequeno projeto que está sendo implementado em Haskell. Vindo de um background imperativo / imperativo, estou acostumado a converter requisitos / histórias de usuários em casos de uso e diagrama de sequência antes da codificação.
No entanto, no projeto Haskell ao qual fui designado, a equipe prefere transformar os requisitos do usuário em proposições / proposições lógicas predicadas. Eu sabia que a lógica era usada em sistemas críticos de segurança e métodos formais para engenharia de software, mas não tanto na programação do dia a dia. Esta prática é comum no campo do FP? Onde posso aprender mais sobre isso?
Parece uma maneira natural de 'modelar' os requisitos e derivar as 'funções' dos predicados, além de anotar as especificações de tipo necessárias para as funções operarem. Mas é assim que é feito / recomendado na prática ou é algo peculiar à minha equipe?
(Tentei pesquisar bastante antes de fazer essa pergunta aqui. A pesquisa por "especificação de requisitos em programação funcional" (e diferentes sinônimos e combinações de palavras-chave) não leva a nada significativo.)