我一直在研究reasonml(https://reasonml.github.io/),一般来说,作为一个“忠实”的函数式程序员,我喜欢这个想法。然而,我相信我对这个项目的推理中有一个缺失的部分。
尤其是我有点困惑,如果它来寻找什么。例如,我想构建一个简单的web服务器。我应该使用js相关的库(express,…)、ocaml技术,或者其他什么?
实际上,我缺少的是一个分步指南,它提供了一种构建完整的基本应用程序的方法(在本例中:假设是一个具有db连接的简单web服务器)。
最后一件事-请原谅我语言不精确。正如我所说:我很确定我对ReasonML的推理有一个空白,我想填补这个空白;)。

最佳答案

如果您想编写可移植代码,应该使用ocaml技术,因此应该使用Array.length(来自ocaml核心)而不是Js.Array.length(bucklescript js wrapper)。
如果您不关心本机代码,但只想瞄准JS(节点/浏览器),那么您可以使用FFI并利用现有的JS库知识。
嗯,这个外国金融机构是ReasonML中比较好的一个。结果代码很小,您可以检查.bs.js文件来查看它在做什么。
但如前所述,您将失去以这种方式生成本机代码的能力。
这里有一个例子,
https://github.com/wires/reason-ffi
假设我在ocaml或reasonml中没有range函数,我不想编写函数,但我知道ramda有一个。写些js,

// range.js
exports.range = require('ramda').range

然后用类型包装,比如
[@bs.module "./range.js"] external range' : (int,int) => array(int) = "range";
let range : (int,int) => list(int) = (a,b) => range'(a,b) |> Array.to_list

我并不是说这是使用这个工具的最终方法,但我发现这是一种非常无摩擦的方法,可以将非类型化的垃圾js转换成一些合理的可维护的东西。
你可以利用你现有的JS库知识,并继续使用AuthML构建,而不是花费你的时间编写一个枯燥的range函数(这也是学习…当然)

10-07 19:30
查看更多