Yesod - 服务器和客户端之间的共享类型

时间:2016-07-29 12:42:56

标签: haskell yesod elm ghcjs

我过去常常使用Dart,在服务器和客户端之间共享类型就像将相关软件包导入项目一样简单。

使用Yesod / Haskell可以实现类似的功能吗?我应该为客户使用GHCJS吗?也许榆树?目标是不必担心服务器和客户端之间的数据传输损坏 - 而且也不必编写单行JS。 :O)

我还没有找到任何关于如何使用Haskell最好地应对这一挑战的好的,初学者友好的文档。我怀疑我还没有找到合适的地方。任何和所有帮助都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

要使用GHCJS实现此目的,您可以用这种方式从三个核心包中构建项目:

  • 前端 - 基于ghcjs-dom的东西,我喜欢Reflex-dom
  • 后端 - 使用您最喜欢的框架,我喜欢Snap,Yesod应该是同样的
  • 共享 - 在前端和后端之间共享的代码

前端和后端都依赖于共享当然。前端使用GHCJS编译,后端编译为GHC

如果您想看一个完整的例子,我强烈建议您学习hsnippet。查看WsApi.hs,其中定义了一组上行和下行消息。所有JSON实例都在一个地方派生,并在前端和后端导入。

Hsnippet使用websockets。当然,这不是必需的。您可以在自己的应用中使用常规XHR。原则保持不变。您可以在共享包中定义API和序列化实例(通常是JSON),并在前端和后端导入相关模块。

我个人也分享验证代码,使用持久性等生成的数据库实体定义。一旦设置好共享,其他东西主要是复制粘贴到其中一个共享模块,然后导入到任何地方。