I just started to learn Ocaml to learn functional programming. I will use it to build a CLI that’s mostly orchestrating other programs.
My experience is mostly in JS / TS, but I’ve also coded a good bit in Python and Lua.
Below, I provided a list of things I learned or focused on while using OCaml. But I feel like I must be missing something. This is only moderately different from what I’m used to in JS. I expected something more radical. Moreover, I constantly hear a lot of FP jargon (like “highly kinded types”, monads, etc) that I feel am still missing.
So far, here’s what I studied:
- immutability
- avoid side affects
- static typing
- recursion instead of loops
- option / maybe
- higher order functions
- conditionals and other constructs as expressions, when they’re statements in other languages
- pipelines and functions as input —> output
- currying
- scoping with let
What am I missing?
OCaML is an amazing language to explore type arithmetic and type based programming. CaML in general is famous for its type flexibility.
I’ve never had a chance to try it, but formal verification with Coq always looked really interesting.
Modules. I find they’re a really great to organize code, and a lot of Ocaml code out in the wild use them.
If you want to read some monads in the wild, go check the code for Jane’s Street “core_unix.command_unix”
Otherwise, GADT, but they are used sparingly because they make type inference undecidable
Ahh I see, so Monads are not that great for Ocaml then?
What’s the best way to handle side effects? I suppose one way is to reduce the amount of code using them. Is there a better approach?