Recientemente me asignaron a trabajar en un pequeño proyecto que se está implementando en Haskell. Viniendo de un entorno OO / imperativo, estoy acostumbrado a convertir requisitos / historias de usuario en casos de uso y diagrama de secuencia antes de la codificación.
Sin embargo, en el proyecto de Haskell al que me han asignado, el equipo prefiere transformar los requisitos del usuario en proposiciones / declaraciones de lógica de predicados. Era consciente de que la lógica se usaba en sistemas críticos de seguridad y métodos formales para la ingeniería de software, pero no tanto en la programación diaria. ¿Es esta práctica común en el ámbito de FP? ¿Dónde puedo aprender más sobre esto?
Parece una forma natural de 'modelar' los requisitos y derivar las 'funciones' de los predicados junto con escribir las especificaciones de tipo necesarias para que las funciones operen. ¿Pero es así como se hace / recomienda en la práctica o es algo peculiar de mi equipo?
(He intentado buscar extensamente antes de hacer esta pregunta aquí. Buscar "especificación de requisitos en programación funcional" (y diferentes sinónimos y combinaciones de palabras clave) no conduce a nada significativo).