Declarative vs Imperative in Functional Programming