Software architecture is the fundamental structure of a software, its modules, functions, types, classes and all other software elements. It is very helpful for developers and architects to evaluate the fundamental structure of a software objectively, because it enables you to reason about maintainability, extensibility, reusability and so on.
A lot of friends and colleagues ask me why I talk about Haskell. Before I learned Haskell I always used mainstream languages like Java, C and C++ - and still like them. So how could it happen that an imperative style developer converts into a Haskell fan? In this article I want to explain it - especially for developers with less experience in functional programming.