键入从GHCJS客户端到Yesod/Snap/Servant的安全RPC调用示例

jhe*_*dus 12 haskell yesod haskell-snap-framework transpiler ghcjs

我有两个关于RPC调用的相关问题Yesod/Snap/Servant:

  1. 假设我在服务器上有一个函数,用Haskell编写,由GHC编译:

    add x y = x+y+42

怎么能:

  1. 我从客户端调用此函数(客户端也是用Haskell编写的,用它编译GHCJS),
  2. 在服务器上执行该功能,
  3. 将结果返回给客户端?

以类型安全的方式做所有这些吗?

例如,我想在客户端上写这样的东西:

main= putStrLn $ show $ add 2 3
Run Code Online (Sandbox Code Playgroud)

这样add函数就可以在服务器执行.

Yesod/Snap/Servant在客户端上使用服务器和GHCJS 进行此操作的最简单方法是什么?

2)同样,我想写一个"功能": getPhaseOfMoon :: IO Phase它在服务器上运行,我想以getPhaseOfMoon类型安全的方式从客户端调用.

所以我可以在客户端上写这个:

main= do 
   p<-getPhaseOfMoon
   putStrLn $ show p
   return ()
Run Code Online (Sandbox Code Playgroud)

哪一个

  1. 去服务器
  2. 服务器参考月相
  3. 服务器返回Phase客户端
  4. 客户端在JavaScript控制台中显示月相.

我怎么能用Yesod/Snap/Servant(服务器)+ GHCJS(客户端)做到这一点?