我习惯使用 Dart,在服务器和客户端之间共享类型就像将相关包导入项目一样简单。
Yesod/Haskell 可以完成类似的事情吗?我应该为客户端使用 GHCJS 吗?也许榆树?目标是不必担心数据在服务器和客户端之间的传输中被破坏——也不必编写一行 JS。:o)
我还没有找到任何关于如何使用 Haskell 最好地应对这一挑战的好的、适合初学者的文档。我怀疑我只是没有找对地方。任何和所有的帮助都非常受欢迎。
为了实现这一点,GHCJS
您可以以这种方式从三个核心包中构建您的项目:
当然,前端和后端都依赖于共享。前端用 编译GHCJS
,后端用GHC
.
如果您想查看完整的示例,我强烈建议您学习hsnippet。查看WsApi.hs
一组上行和下行消息的定义位置。所有 JSON 实例都在一个地方派生并在前端和后端导入。
Hsnippet 使用 websockets。这当然不是要求。您可以在自己的应用程序中使用常规 XHR。原理保持不变。您在共享包中定义 API 和序列化实例(通常是 JSON),并在前端和后端导入相关模块。
就我个人而言,我还共享验证代码、使用持久化生成的数据库实体定义等。一旦您设置共享其他内容,主要是复制粘贴到其中一个共享模块,然后在任何地方导入。