I've had a few years of experience working with programming languages that mainly support imperative programming (declaring variables, creating loops, maintaining implicit state) but I've picked up Haskell over the past few months (which strictly enforces pure functional programming) and sometimes I wish that Haskell would provide at least basic support for some form of imperative programming (something like F#) - after all, it is much easier to create a loop and mutate a few variables than express everything in terms of recursion, monads and the like for certain types of problems. But then I look at languages like Swift which attempt to incorporate procedural, object-oriented and functional programming into one and all I see is a mess - it tries to make itself look familiar to developers using C-like languages but barely resembles C (or even Java, C#, JS and the like); it tries to make itself concise and human-readable like Python/Ruby by borrowing certain syntactic features but is actually far more verbose, and its extra-strong type system along with its "functional" features just seems to get in the way most of the time.
So, what do you think? Should a "good" programming language (whatever that may mean) strictly enforce one particular paradigm for all sorts of problems like Haskell, should it emphasize one particular paradigm but allow for other approaches as well like F# or should it try to incorporate as many different paradigms as possible and let the programmer decide which one(s) to use for each problem (e.g. Swift or C++)? Feel free to leave a comment below explaining your view :)