| >> that can be easily replaced with similar constructs > Mind giving an example? You can use, for example, elaborate if-else constructs that firstly try to
determine type of the value, then check for values. I've never seen in imperative languages anything similar to conditional that
checks both type and content of an expression, and allows to capture parts of
that expression into variables. Well, except for precisely the pattern
matching construct, where it was implemented deliberately after functional and
declarative languages (Rust). >> Using a not very popular programming language can actually make it harder for you to hire people. > Do you really want to work with people who can't learn a tiny little language? I see things a little differently. It's extremely difficult to find an idiot
who can write OCaml, while it's fairly easy for C++, Java, or C#. Also, allowing people to learn OCaml and use it every day on the job is
a big plus for a company. It's way better than free sandwitches for breakfast
in the long run. |
That's dynamic typing. Very different from pattern matching over sum types: with dynamic typing, you can basically forget about most compile time guarantees. Seriously, you sound like, "why bother with Ocaml when JavaScript does the same thing?". I can tell you from first hand experience that they do not feel the same at all.
The other classic example, class hierarchies, is also very different from pattern matching —and much more cumbersome. The only language I know of that kinda bridged the two is Scala, with case classes.