How to construct large and fast Haskell programs ?