标签: happstack

在Mac上安装Haskell软件包

我似乎无法在我的Mac上安装一些Haskell软件包(10.6.8).我第一次尝试了哈普斯塔克,它失败了,然后我尝试了Snap.

有时当我运行ghci时,我会遇到分段错误.

其他时候它的工作原理如下:

GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>
Run Code Online (Sandbox Code Playgroud)

在尝试获取Snap时:

....
....
....
Loading package vector-0.10.0.1 ... linking ... done.
Loading package zlib-0.5.4.0 ... linking ... done.
Loading package zlib-bindings-0.1.1.3 ... linking ... done.
Loading package zlib-enum-0.2.3 ... linking ... done.
Loading package snap-core-0.9.3.1 ... linking ... done.
Loading package snap-server-0.9.3.3 ... linking ... done.
Loading package …
Run Code Online (Sandbox Code Playgroud)

macos haskell ghci happstack haskell-snap-framework

28
推荐指数
6
解决办法
3万
查看次数

如何使用Snap检查客户端证书

我知道它很少使用,但是可以在Snap中访问客户端证书吗?

如果没有,是否可以使用不同的Web堆栈?

ssl haskell happstack haskell-snap-framework

26
推荐指数
1
解决办法
392
查看次数

如何在Haskell中实现HATEOAS?

我有一些旧的代码,它在Web API上公开服务,它基本上用于HTTP动词.我想将此项目移至使用超媒体控件(HATEOAS).我想知道是否有任何库已经支持根据HAL或JSON-LD规范在子资源的资源表示中嵌入链接.我用Google搜索了但我找不到任何东西.很高兴知道Yesod,Snap或Happstack等成熟项目是否计划支持此功能?

编辑:为了澄清,我对REST成熟度模型的第3级感兴趣

rest haskell hateoas happstack yesod

16
推荐指数
1
解决办法
683
查看次数

使用Happstack Web开发工具包建议使用哪些软件进行身份验证?

上周,我们三个人花了两天时间尝试使用Happstack构建一个简单的Web应用程序.我们关注的一个问题是身份验证,看起来曾经有一个Happstack.Auth看起来非常好的软件包.不幸的是原来的项目似乎已经被放弃了,虽然有一个fork,但是我们无法构建fork.

人们建议在Happstack中进行身份验证有哪些替代方案?是否happstack-auth可行?

haskell web-applications happstack

9
推荐指数
1
解决办法
612
查看次数

使用不是来自具有Heist模板的应用程序monad的值

我正在尝试使用Happstack,Heist和Web路由编写应用程序服务器,但是我很难弄清楚如何让拼接访问不是源自我的应用程序的monad堆栈的值.

出现这种情况有两种情况:

  • 通过Web路由从URL路径中提取的参数.当将请求路由到适当的处理程序时,这些来自类型安全URL上的模式匹配.
  • 会话信息.如果请求是针对一个全新的会话,我无法从请求中的cookie读取会话标识符(因为还没有这样的cookie),并且如果需要,我不能使用拼接来创建新会话,从那时起如果不止一个接头尝试这样做,我最终会为一个请求创建多个新会话.但是如果我在输入web-routes之前创建会话,则会话存在于应用程序monad之外.

请考虑以下尝试提供以下URL的示例程序:

  • /阶乘/ Ñ输出的阶乘Ñ
  • / reverse/str输出str向后

由于参数显示在URL路径而不是查询字符串中,因此它将通过Web路由而不是来自ServerPartT monad提取.但是,从那里开始,没有明确的方法将参数放在拼接可以看到的位置,因为它们只能访问应用程序monad.

将ReaderT粘贴在monad堆栈上的明显解决方案有两个问题:

  • 在ServerPartT上面有一个ReaderT隐藏了monad堆栈的Happstack部分,因为ReaderT没有实现ServerMonad,FilterMonad等.
  • 它假设我所服务的所有页面都使用相同类型的参数,但在此示例中,/ factorial需要Int但//reverse需要String.但是对于两个页面处理程序使用相同的TemplateDirectory,ReaderT需要携带相同类型的值.

从Snap文档中窥视,看起来Snap通过有效地将它们复制到查询字符串中来处理URL路径中的参数,从而回避问题.但这不是Happstack和网络路由的选择,此外,有两种不同的方式让URL指定相同的值会让我觉得安全性是一个坏主意.

那么,是否有一种"正确"的方式将非应用程序monad请求数据公开给拼接,或者我是否需要放弃Heist并使用像Blaze-HTML这样的东西而不是问题?我觉得我错过了一些明显的东西,但无法弄清楚它可能是什么.

示例代码:

{-# LANGUAGE TemplateHaskell #-}

import Prelude hiding ((.))

import Control.Category ((.))
import Happstack.Server (Response, ServerPartT, nullConf, ok, simpleHTTP)
import Happstack.Server.Heist (render)
import Text.Boomerang.TH (derivePrinterParsers)
import Text.Templating.Heist (Splice, bindSplices, emptyTemplateState, getParamNode)
import Text.Templating.Heist.TemplateDirectory (TemplateDirectory, newTemplateDirectory')
import Web.Routes (RouteT, Site, runRouteT)
import Web.Routes.Boomerang (Router, anyString, boomerangSite, int, lit, (<>), (</>))
import Web.Routes.Happstack (implSite)

import qualified Data.ByteString.Char8 as C …
Run Code Online (Sandbox Code Playgroud)

haskell happstack heist

7
推荐指数
1
解决办法
473
查看次数

Haskell Webserver:维护应用程序状态

我正在尝试通过开发web-app-ish服务来更熟悉Haskell.

假设我正在开发一个Web服务器,我希望在请求之间保持持久状态; 例如,一个柜台.什么是Haskell的做事方式?

我在Google搜索中遇到了这个讨论.建议的解决方案看起来像是不该做的一个很好的例子.

我的一个想法是让请求处理程序接受一个MVar:

requestHandler :: MVar State -> IO (Maybe Response)
Run Code Online (Sandbox Code Playgroud)

注册处理程序时,可以使用在main中创建的MVar进行curry.

肯定有更好的办法.我不禁想到我正在以非功能性的方式解决这个问题.

谢谢!

haskell functional-programming happstack

7
推荐指数
1
解决办法
492
查看次数

在Yesod长期投票

我可以在Yesod或任何其他具有可比数据库功能的Haskell Web框架中进行长时间轮询吗?

确切地说,我想延迟HTTP响应,直到发生一些有趣的事情.还应该有一个超时,在此之后客户端将被提供响应,说"没有发生",然后客户端将发出相同的请求.

为了让生活更加复杂,我想到的应用程序是通过HTTP/HTML5和MIDP客户端的一个非常紧凑的UDP协议提供所有的东西.来自任一协议的事件都可以在任一协议中释放响应

TIA,阿德里安.

haskell long-polling happstack yesod haskell-snap-framework

7
推荐指数
1
解决办法
671
查看次数

如何在另一个monad中使用monad?

我有这个代码(在happstack里面,但可能只是IO monad):

accountHandler conn = do
  sessionId <- optional $ readCookieValue "sessionId"

  case sessionId of
    Nothing -> seeOther ("/" :: String) $ toResponse ()
    Just s  -> do
      result <- loggedInUserId conn s

      case result of
        Just userId -> seeOther ("/account/" ++ unUserId userId) $ toResponse ()
        Nothing -> seeOther ("/" :: String) $ toResponse ()
Run Code Online (Sandbox Code Playgroud)

我想删除嵌套的case语句并写下如下内容:

accountHandler conn = do

  let action = do
                sessionId <- optional $ readCookieValue "sessionId"
                userId    <- loggedInUserId conn sessionId

                return $ seeOther ("/account/" …
Run Code Online (Sandbox Code Playgroud)

haskell happstack

7
推荐指数
1
解决办法
1856
查看次数

如何使用Happstack创建JSON Rest API?JSON身体?

我正在尝试使用Happstack创建一个JSON REST api.它应该允许带有JSON主体的POSTS.我怎样才能做到这一点?happstack的API中的所有函数似乎都根据参数名称查找.它认为身体总是经过网址编码.

如果使用Happstack是不可能的,我应该使用哪个框架?

haskell happstack

6
推荐指数
1
解决办法
1829
查看次数

如何将Happstack应用程序部署到生产中?

我似乎无法找到有关此主题的任何文档,任何博客或其他资源.

从我到目前为止看来似乎有所支持,FastCGI但该项目已经有4年的承诺.然后mod_proxy可能会被使用.也许您可以将Happstack应用程序作为守护程序运行,该守护程序可以自行处理所有请求.

我只是在这里猜测,看看有经验的人说的真是太好了!

linux deployment haskell web-deployment happstack

6
推荐指数
1
解决办法
695
查看次数