[Haskell-beginners] Designing complex Haskell programs