有没有更原始、更实用的Haskell web框架?

有没有更原始、更实用的Haskell web框架?,haskell,web-frameworks,Haskell,Web Frameworks,我研究了Haskell的web框架,比如Snap和Yesod。大多数似乎实现了MVC风格的方法,让我想起了RubyonRails之类的web框架。是的,MVC可以通过FP实现,但它并没有显示FP方法的巨大优势。由于HTTP是一种无状态协议,我希望有一个Haskell框架采用更原始、更纯粹的功能方法。有吗?这取决于你想要达到的目标。如果说无状态实际上是指无状态,那么我使用模板框架来生成静态页面。它有一个有趣的结构来处理依赖项和文件更新。我不确定您希望框架使用FP中的哪些功能,但我认为YesSOD使

我研究了Haskell的web框架,比如Snap和Yesod。大多数似乎实现了MVC风格的方法,让我想起了RubyonRails之类的web框架。是的,MVC可以通过FP实现,但它并没有显示FP方法的巨大优势。由于HTTP是一种无状态协议,我希望有一个Haskell框架采用更原始、更纯粹的功能方法。有吗?

这取决于你想要达到的目标。如果说无状态实际上是指无状态,那么我使用模板框架来生成静态页面。它有一个有趣的结构来处理依赖项和文件更新。

我不确定您希望框架使用FP中的哪些功能,但我认为YesSOD使用了一些功能,带来了很大的好处。(Happstack也有,但我对它不太熟悉。)

  • 类型安全URL消除了一整类由键入错误生成的错误,并自动处理输入验证

  • 正确的类型实际上可以消除XSS攻击

  • 根据您处理的数据范围,根据您的存储需求使用STM或MVAR可以很容易地避免多线程应用程序中的争用条件和死锁


我相信还有很多我没有想到的,但我希望这能说明问题。但也许您正在寻找的是类似于基于延续的框架的东西。我个人认为它们是个坏主意(我是REST的信徒),但我认为它可能看起来更“实用”。

我一直在寻找相同的方法,但还没有真正找到它。具体地说,我正在寻找一种使传统HTTP会话变得不必要的延续方法。这类框架在Scheme中非常流行。我找到的最接近的答案是Chris Eidhof对Arc挑战的回答:-

这是一个粗略的原型,可能需要很多人几个月才能成为一个可以用于严肃工作的东西。如果我的Haskell技能更好,我可能会尝试并发展它


我也相信华盛顿也采取了这种方法,但这种方法似乎已经过时了。我把希望寄托在mysnapsession上,因为我相信它也在寻找一个基于延续的会话工具,这将是令人兴奋的,因为我对Snap其余部分的质量和背后的动力印象深刻。

我认为WardB问的不是花哨的类型,而是FP的指称/无状态语义,与IO和STM等事物的命令式/非命令式(通常是不确定的)语义相反。 正是这一外延方面支持精确且易于理解的推理。 术语“功能性”也被延伸到包含命令式/非命令式编程,这通常会导致混淆。 将“功能性”替换为“外延性”,有助于澄清这种混淆

我不知道有任何指称性(非强制性)Haskell web框架。 要做到这一点,可能需要打破一些长期存在的强制性思维习惯。
也就是说:有趣的工作

HTTP可能是无状态的,但web应用肯定不是。好吧,web应用用会话状态之类的东西来模拟请求之间的状态,但没有什么内在的理由需要有状态。只是开发人员已经习惯了用这种方式来解决问题(比如使用服务器端会话)@WardB:服务器端会话确实提供了安全性/带宽节约,如果每一条数据都被卸载到客户端,并且必须在每次请求时传输回来,这将很难实现。当然,随着HTML5的出现,由于嵌入式sqlite db,在客户端存储会话数据可能会变得更容易;当然,这并不能解决安全问题。还有一个有趣的问题:)@WardB:不要求任何州是一个非常大胆的声明,例如,在亚马逊上,我可以在付款前选择几本书。当然,您可以根据每个请求转发所选书籍的列表。。。但是当使用backbutton时,它不会很好地工作:/@WardB:您谈论函数式编程时,就好像它都是为了避免状态。这并不是为了避免状态,而是为了提供一个安全的机器来处理它,我不是指静态页面。只是请求/响应之间没有共享状态或副作用如果没有共享状态,并且没有副作用。。。你能做什么静态页面做不到的?@Carl:页面内容可能仍然是动态生成的(取决于请求参数)。我猜他可以根据请求参数实现一些简单的调度,以这种方式提供正确的静态页面。谢谢你的回答。我对延续的理解是,它实际上与国家有关。在web开发中使用该模型试图实现一个模拟的全状态环境。