Hacker News new | ask | show | jobs
by yawaramin 1394 days ago
OK but you can write code golf in any language, OCaml provides every opportunity to write readable code. The second snippet you provided is incomplete, if we were to write it in Python terms it would be something like:

    (resolve=lambda info: ...)
But let's say for the sake of argument that it's an argument to a function `f`:

    f ~resolve:(fun info () -> ...)
One of the simplest ways to improve readability is to use argument name punning:

    let resolve info () =
      let sleep =
        let open Lwt.Syntax in
        let+ () = Lwt_unix.sleep duration in
        duration
      in
      Lwt_result.ok sleep
    in
    f ~resolve
1 comments

To be fair, it’s hardly code golf. It’s just that Lwt takes a monadic approach to concurrency and that’s always going to look a bit strange to someone unfamiliar with using monads and who doesn’t know that (>|=) is fmap.

I never understood why Lwt chose this aweful operator by the way. That’s a really unfortunate choice. My guess is that they really want people to use their ppx extension. I really hope that eio will solve the current concurrency libraries mess.

It’s the same for the first exemple: if you don’t know (:>) is upcasting, you are going to wonder what you are reading. I have to confess I had to look for it. Despite using Ocaml professionally for a bit a decade ago, I never had to upcast anything.

It’s hardly beautiful code but it’s fairly readable.