I've recently been assigned to work on a small project which is being implemented in Haskell. Coming from an OO/imperative background, I'm used to converting requirements/user-stories into use-cases and sequence diagram prior to coding.
However, the Haskell project that I have been assigned to, the team prefers to transform the user requirements into predicate logic proposition/statements. I was aware of logic being used in safety critical systems and formal methods for software engineering, but not so much in day to day programming. Is this common practice in the FP realm? Where can I learn more about this?
It seems like a natural way to 'model' the requirements and derive the 'functions' from the predicates along with writing down the necessary type specifications for the functions to operate on. But is that how it is done/recommended in practice or is it something peculiar to my team?
(I've tried searching extensively prior to asking this question here. Searching for "requirements specification in functional programming" (and different keyword synonyms and combinations) doesn't lead to anything meaningful.)