Haskell makes it very easy for you if you work with it in a more interactive fashion, asking it to infer types for you as you go along. One of the best features for doing this is Typed Holes [0].
data Clauses = Clauses
data Symbols = Symbols
data Model = Model
isTrueIn = undefined
isFalseIn = undefined
findPureSymbol = undefined
minus = undefined
including = undefined
findUnitClause = undefined
I think it's more a question of personal preference than right or wrong.Personally I'd start from smaller functions up but it's not like there's no feedback.
I personally find fixing type errors far more enjoyable than debugging, and even if I didn't, I think one can argue that fixing type errors is a more predictable workflow and therefore contributes less uncertainty for time budgeting.
I'm a big believer in exploring problem spaces with loose, flexible tools that let you get to the point ASAP and ignore unrelated stuff. If you're then going to build a long-lived, high-availability production system, then take what you learned and harden your design using tools built for long-lived, high-availability production systems (e.g. static typing, formal methods, etc.).
The joy of good languages is closing the gap between prototyping and production, research and practice.
I write a lot of Haskell these days, and whenever I'm faced with a compiler error I don't understand, it always ends with finding out that my data model was inaccurate. Two ends weren't fitting together, because I hadn't fully understood what those two ends actually were.