| > Functional programming and lazy evaluation are common in Apache Spark Spark ain't a language, it's an engine. Anyhow, you could make the point for lazy evaluation in stream libraries in many languages. It's not really comparable to having this as a first class citizen in the language, just like Guava didn't make Java7 equal to Java8. > Non-nullable types can be found in Java (@NonNull) and in C++ (references). C++17 got std::optional type. The reason people talk about it isn't about having non nullable types, it's about not having nullable types (or, at least, not having them as a default). > We have languages without inheritance, like Go, Rust and so on. I don't believe not having inheritance is a language feature. People may say that inheritance was a mistake and that languages without it are better off, but you will rarely hear about no inheritance being a feature of a language. > Errors-as-values are pretty common as well (C++'s boost had boost::error code for a while now, and of course there is Go again) Haskell has an error system. Errors as values are a pattern enabled by other things of the language (ADTs, functors/monads), but not having errors is not a Haskell feature. Elm would be a better example of this. > Even monads find themselves in other languages See above point about first-class things in a language. Your analysys about features is misguided because languages aren't things that can be compared feature by feature. They are a coherent set of things that produce a specific dev experience. Haskell is offering a specific experience that people enjoy, and therefore, people talk about it, and some other languages tend to adopt some of the features in an attempt to reproduce the experience. |