Seems that Lwt 5 throws a weird error when using `exit(1)` inside a
promise. So instead of exiting in the command, making all executable
modules a function that returns a `result((), status_code)` is a better fit.
Relates to: https://github.com/ocsigen/lwt/issues/758
* Fix build with fixed versions
* Use carets
* support `lts/dubnium` format
* trim string in test
* fix typo
* Add resolution to windows.json too
* Use specific opam file
* remove ansi codes from provided version string
* add check func whether the specify version is already installed or not
* Revert "remove ansi codes from provided version string"
This reverts commit 9e5b27f942e8be94c1bffda13a254f46cbf3dece.
* apply code review(rename check function)
* run esy fmt
* move short path to the top of the switch case
* use Result.fold instead of switch case
* use Array.exists instead of List.exists