←back to thread

Learn OCaml

(ocaml-sf.org)
203 points smartmic | 1 comments | | HN request time: 0.225s | source
Show context
hyper57 ◴[] No.44400829[source]
Loved using OCaml for a compiler course at uni when I was a student. But I've always felt that the tooling side is pretty rough, especially on Windows. Opam recently added Windows support, but it involves installing MinGW, and when following the official docs https://ocaml.org/docs/installing-ocaml#install-platform-too... the process breaks down with an error when trying to install utop due to a path separator error, which one has to fix manually (at least that was the case last time I tried). By comparison, installing Python or Rust on Windows is a breeze.
replies(3): >>44400889 #>>44401349 #>>44401688 #
emacdona ◴[] No.44401688[source]
Never played with OCaml, but I spent the past few days learning about F# (my understanding is that it inherits a lot from OCaml). Tooling seemed great: I used JetBrains Rider; VSCode and Visual Studio are also options. Support seemed great: good official docs; good book choices. Ecosystem seemed great: entire .Net class library.

I’m been on the JVM for 20+ years, but an opportunity came up to leverage some of my other experience to get some CLR work… and I dove in.

replies(3): >>44402376 #>>44404548 #>>44405205 #
rpeden ◴[] No.44405205[source]
F# has diverged from OCaml a bit, but they're still very similar.

I mentioned in a top-level comment that F#'s "lightweight" syntax is basically what I want when I use OCaml. I know ReasonML is a thing, but if I'm writing OCaml I don't want it to look more JavaScripty - I prefer syntax like "match x with" over "switch(x)" for pattern matching, for example.

I know some people dislike the way F#'s newer syntax makes whitespace significant, and that's fair. But the older verbose syntax is there if you need or want to use it. For example, something like

  let things = 
    let a = 1 in
    let b = 2 in
    let c = 3 in 
    doSomething a b c

should still work in F# like it would in OCaml.
replies(1): >>44405256 #
yawaramin ◴[] No.44405256[source]
> F#'s "lightweight" syntax is basically what I want

It's actually not that far off. For definitions that don't need to be self-referential you can use 'and':

    let things =
      let a = 1
      and b = 2
      and c = 3 in
      do_something a b c
replies(1): >>44406703 #
1. rpeden ◴[] No.44406703[source]
Thank you! I knew this, but of course blanked on it when I came up with an Ocaml example.

There are a few other places I prefer F#'s syntax, but overall it's not the reason I'd pick F# over OCaml for a project. It's usually mostly about needing to integrate with other .NET code or wanting to leverage .NET libraries for specific use cases.

Can't lose either way - they're both a please to work with.