ReasonML示例Web服务器与数据库

3
我一直在研究ReasonML(https://reasonml.github.io/),作为一个“忠实”的函数式程序员,我很喜欢这个想法。然而,在我对这个项目的思考中,我认为有一部分缺失。
具体来说,如果要搜索内容,我有些困惑。比如说,我想构建一个简单的Web服务器,应该使用JS相关库(express等)、OCaml技术还是其他什么东西?
我真正缺少的是一份逐步指导的指南,介绍构建一个完整基础应用程序的方法(在这种情况下:假设是连接数据库的简单Web服务器)。
最后一件事——请原谅我的不够准确的语言。正如我所说的:我相信在我的ReasonML推理中存在一个差距,我想弥补它;)。

不是直接回答你的问题,但你可以听这个播客 https://reason.town/server-side - thangngoc89
1个回答

3
如果您想编写可移植的代码,应该使用OCaml技术,因此使用OCaml核心中的Array.length而不是Bucklescript JS包装器中的Js.Array.length。
如果您不关心本地代码,只想针对JS(node/browser)进行目标设置,则可以使用FFI并利用您现有的JS库知识。
在我看来,这个FFI是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库知识,并继续使用reasonML进行构建,而不是花费时间编写单调乏味的range函数(当然也是学习...)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接