top | item 32639570

(no title)

donut2d | 3 years ago

You can actually compile ReasonML to native code with dune.

What are some of the things that weird you out about OCaml's syntax?

discuss

order

gavinray|3 years ago

  > You can actually compile ReasonML to native code with dune.
Yeah but the community doing native ReasonML is small and the maintenance has really petered off.

With OCaml 5 looming you're better off just biting the bullet and writing OCaml if you're going to do it IMO.

  > What are some of the things that weird you out about OCaml's syntax?
For whatever reason, I really dislike the named-argument syntax -- and some of the operators make it hard to read compared to named alternatives IMO.

Below examples showcases some of these:

    let variables = (json_variables :> (string * Graphql_parser.const_value) list)

    ~resolve:(fun info () ->
      Lwt_result.ok (Lwt_unix.sleep duration >|= fun () -> duration)
    )

yawaramin|3 years 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