Due to structural typing the error messages with Dhall were very verbose and sometimes confusing. It’s a very impressive tool nevertheless.
My team and I considered using it but ended up building a Kubernetes configuration kit for ReasonML/OCaml - https://github.com/rizo/rekube. Technically it’s just a embedded DSL for the Kubernetes API, almost everything else is provided by ReasonML.
Interesting as well, thanks!
Any reason why you choose ReasonML specifically? Was it something your team has been comfortable with already and/or were there technical reasons which stood out?
My team was already familiar with ReasonML from working on other parts of the system in ReasonML. But familiarity is not the only reason why we picked ReasonML. It’s a language with approachable syntax, excellent type-system and good IDE integration.
Rekube itself is based on an ocaml-swagger library which makes the generation of Kubernetes bindings trivial.
Getting started with OCaml is so much easier nowadays than it was just a couple of years ago.
Here’s a quick guide for anyone who wants to try the modern development workflow in OCaml: https://medium.com/@bobbypriambodo/starting-an-ocaml-app-project-using-dune-d4f74e291de8
It is really surprising he didn’t find jbuilder which is the build system that seems to be displacing all the other build systems in OCaml and has a passable learning curve.
Maybe because he uses Reason syntax, which is probably not supported very well, if at all.
It’s called Dune now: https://github.com/ocaml/dune
Dune has no releases yet, so for now it still is jbuilder.
Dune supports Reason syntax out of the box and will pick up all *.re files automatically.
I read the original paper on modular implicits last week and really hope it makes to the mainline branch soon. My only dislike is having to mark modules as being implicit, rather the compiler checking against all modules in scope. I suppose this makes compilation faster, but I’m wondering if it’s a case of premature optimization.
Interesting. I think I’d like that as a default as long as excluding some modules from the lookup could be an option (explicit module?).