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?
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?
Modules. I find they’re a really great to organize code, and a lot of Ocaml code out in the wild use them.
I’ve never had a chance to try it, but formal verification with Coq always looked really interesting.
OCaML is an amazing language to explore type arithmetic and type based programming. CaML in general is famous for its type flexibility.