Like Clojure or Haskell, Elm is a functional programming language.
The language is not the reason for global state, it's always the programmer. Even in Haskell you have IORefs and similar for global state.
I use Cycle.js for writing web apps in typescript. As a functional framework, I do not have any global state.
That's awesome that you don't have global state!
Functional programming naturally avoids global state, such as member instance variables.
I'll have to check out Cycle.js (I've got 2 years of using TypeScript day in and day out... but we had classes with member variables, so our code relied heavily on global state and moreso smaller scoped global state for instances.)
Pure functions and separation of logic from data can reduce or eliminate global state.
The other parts -- getting rid of mutables and getting rid of state-ful-ness altogether -- are the other challenges of OO that is easy and natural in FP.
Nice writeup. Rust deals with the mutable part of this triple-whammy by adding mut syntax into the language to mark a binding as mutable.
In this way, all variables are immutable unless they are explicitely marked as mutable. Trying to modify an immutable variable will result in a compile-time error. It also has the added benefit of allowing the compiler to warn you if you've marked a variable as mutable unnecessarily.
I think this helps keep the thought of immutability in your mind when programming. It also allows another developer to know which parts of a program contain mutable state.
This will be on my all time favorites, for sure 😁
Maybe it's just me, but aren't you first counting lines of a file and then iterating over each line in the same file and appending line count to each line? Effectively reading through the file twice.
Looks like a bug to me...
Nice post! I like how you reduced 20+ lines of code to just 3 lines. 👏
Pony is an object-oriented, actor-model, capabilities-secure programming language that handles mutability really well. ponylang.org/discover/
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.