标签: happstack

减少happstack教程代码中的冗余

happstack教程提供以下示例:

main :: IO ()
main = simpleHTTP nullConf $ msum 
       [ do methodM GET
            ok $ "You did a GET request.\n"
       , do methodM POST
            ok $ "You did a POST request.\n"
       , dir "foo" $ do methodM GET
                        ok $ "You did a GET request on /foo.\n"
       ]
Run Code Online (Sandbox Code Playgroud)

这似乎ok $是多余的 - 有没有办法把它拉出来,msum这样你就不必写ok $三次了?我尝试了以下,但它甚至没有编译:

main :: IO ()
main = simpleHTTP nullConf $ ok $ msum 
       [ do methodM GET
            "You did a …
Run Code Online (Sandbox Code Playgroud)

haskell happstack

3
推荐指数
1
解决办法
268
查看次数

任何Haskell Web服务器都可以运行Python CGI应用程序吗?

我需要一个使用Haskell开发的Web服务器来运行旧的Python CGI应用程序.

任何建议表示赞赏!

haskell happstack yesod haskell-snap-framework

3
推荐指数
1
解决办法
574
查看次数

Markup monad如何与Html monad相关联?

我正在使用blaze-html.我终于能够总结我的头脑如何使用它,但是一些monad和变换确实让我一直绊倒.但是这里有一个特殊的绊脚石(很多人都会这么做,但是我会离开这里再到Happstack的Response和ServerPart monad).

如果我想将字符串文本附加到段落,我必须使用此函数(来自Text.Blaze.Html5):

p . toHtml :: ToMessage a => a -> Html
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了......

toHtml :: ToMarkup a => a -> Markup
p :: Html -> Html
Run Code Online (Sandbox Code Playgroud)

我尽我所能搜索文档,我看不出Markup monad和Html monad是如何相互关联的.我如何处理所有类型和类型类?

haskell web-frameworks happstack

3
推荐指数
1
解决办法
232
查看次数

什么是MACID?

我最近发现了HAppSHappstack项目,后者指出其任务之一是"利用MACID".

什么是MACID?

haskell happstack

2
推荐指数
1
解决办法
456
查看次数

Haskell和webframeworks

我开始开发一个应用程序(一些无聊的会计软件供内部使用),并决定将其设置为基于Web的,因为这可以一次性解决几个问题.

现在有几个用于Haskell的webframeworks可供选择(happstack,yesod和snap),我仍然开始感到痛苦,不得不处理HTML,CSS和非常聪明的有线JavaScript.

嗯.

那么我认为可能会尝试使用所有AJAX方式并在CappuccinoSproutCore中执行UI .(SEO不是问题).

但是现在我真的不需要一个完整的Web框架,比如上面三个中的一个,一个可以提供JSON或XML包装的数据的HTTP服务器在理论上应该足够了.

现在还有一点可以使用这三者中的任何一个吗?

最重要的是这种方法的可行性如何?

半滑舌鳎

haskell happstack yesod haskell-snap-framework

2
推荐指数
1
解决办法
837
查看次数

Haskell,String vs ... String?

我目前正在关注他们网站上的Happstack lite教程.http://happstack.com/page/view-page-slug/9/happstack-lite-tutorial

现在,我正在实现该echo功能,编译器给我一个我不太懂的错误信息.这是我的代码:

echo :: ServerPart Response
echo =
    path $ \(msg :: String) ->
        ok $ template "echo" $ do
            h1 "Echo service"
            p "Giant, Haskell style Papagallo"
            p msg
Run Code Online (Sandbox Code Playgroud)

这是错误信息:

src/motiondude.hs:35:15:
    Couldn't match type `[Char]' with `Text.Blaze.Internal.MarkupM ()'
    Expected type: Html
      Actual type: String
    In the first argument of `p', namely `msg'
    In a stmt of a 'do' block: p msg
    In the second argument of `($)', namely
      `do { h1 "Echo service";
            p "Giant, …
Run Code Online (Sandbox Code Playgroud)

haskell types happstack

2
推荐指数
1
解决办法
352
查看次数

HappStack中的Haskell Monads msum

http://happstack.com/docs/crashcourse/HappstackState.html

当我运行服务器时,偷看计数器增加了

  • 1,当我偷看
  • 2,当我不偷看

相关的相关代码是:

handlers :: ServerPart Response
handlers = 
    msum [ dir "peek" $ do c <- query PeekCounter
                       ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
         , do c <- update (AddCounter 1)
           ok $ toResponse $ "New count is: " ++ show (unCounter c)
         ]
Run Code Online (Sandbox Code Playgroud)

但是,当我修改它时

handlers :: ServerPart Response
handlers = 
    msum [ dir "peek" $ do c <- query PeekCounter
                           ok $ toResponse $ "peeked at …
Run Code Online (Sandbox Code Playgroud)

monads haskell happstack

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

为什么monad不能被分解?

我不明白为什么我不能分解(让我们说IO)monad.喜欢IO a -> a

我的问题使用happstack和想要得到的时候起源Text的出ServerPart (Maybe Text)这是由返回(optional $ lookText "domain").然后我记得读到IOmonad无法逃脱.

我已经读过unsafePerformIO它以及它为什么不好的原因,但这些原因似乎都没有回答我的问题.

io monads haskell happstack

1
推荐指数
2
解决办法
378
查看次数

如何在Haskell的列表中的每个元素上应用函数?

我这里有一个元组列表,我想dir..在每个元组的第一个元素上应用函数。我怎样才能做到这一点?在此先多谢!

[ ("grid", gridResponse),
("graph", graphResponse),
("image", graphImageResponse),
("timetable-image", timetableImageResponse x),
("graph-fb",toResponse ""),
("post-fb",toResponse ""),
("test", getEmail),
("test-post", postToFacebook),
("post", postResponse),
("draw", drawResponse),                  
("about", aboutResponse),
("privacy" ,privacyResponse),
("static", serveDirectory),
("course", retrieveCourse),
("all-courses", allCourses),
("graphs", queryGraphs),
("course-info", courseInfo),
("depts", deptList),
("timesearch",searchResponse),
("calendar",calendarResponse),
("get-json-data",getGraphJSON),
("loading",loadingResponse),
("save-json", saveGraphJSON)?
Run Code Online (Sandbox Code Playgroud)

haskell happstack

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

如何在Happstack中使用"IO String"作为HTTP响应?

我正在使用HDBC从数据库中检索数据,然后尝试使用Happstack将此数据发送到Web客户端.

myFunc :: Integer -> IO String
myFunc = ... fetch from db here ...

handlers :: ServerPart Response
handlers =
    do decodeBody (defaultBodyPolicy "/tmp/" 0 1000 1000)
       msum [ 
                dir "getData" $ ok $ toResponse $ myFunc $ toInteger 1
            ]

mainFunc = simpleHTTP nullConf handlers
Run Code Online (Sandbox Code Playgroud)

当我构建上面的代码时,我收到此错误:

使用"toResponse"时没有(ToMessage(IO String))的实例

我尝试了什么?

  1. 我试图将其转换IO StringString(liftIO例如使用).
  2. 我试图在这里找到任何类似的问题.
  3. 我试图在Happstack Crash Course中找到一个类似的例子.
  4. 我用各种不同的组合搜索了所有相关的关键字.

提前致谢.

haskell happstack hdbc

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

为什么Web路由不总是自动化的?

手动Web路由的目的是什么?为什么不是每个人都只是自动映射URL和模块/方法/函数名称?

我认为你可以从全自动映射开始,然后你就可以使用Apache mod_rewrite或mod_redirect,或者如果你想以一种改变URL的方式重构,而不破坏现有的URL.

routes ruby-on-rails happstack playframework

0
推荐指数
1
解决办法
295
查看次数

后端在haskell中服务当前时间(在json中)

我想在haskell中编写一个简单的web服务器,它提供当前时间.时间应以json格式返回.

这是我到目前为止:

{-# LANGUAGE DeriveDataTypeable #-}

import Happstack.Server
import Text.JSON.Generic
import Data.Time
import System.IO.Unsafe

data TimeStr = TimeStr {time :: String} deriving (Data, Typeable)

main = simpleHTTP nullConf $ ok $ toResponse $ encodeJSON (TimeStr $ show (unsafePerformIO getCurrentTime)) 
Run Code Online (Sandbox Code Playgroud)

我知道unsafePerformIO应该避免,但我还没有找到更好的解决方案.也许这就是问题所在?我对monad有一个非常基本的了解.

结果如下:

{"time":"2014-10-16 16:11:38.834251 UTC"}
Run Code Online (Sandbox Code Playgroud)

问题是,当我刷新localhost:8000时间不会改变.是否有某种记忆正在进行?

haskell happstack

0
推荐指数
1
解决办法
103
查看次数