标签: yesod

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

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

任何建议表示赞赏!

haskell happstack yesod haskell-snap-framework

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

请解释类型同义词

我正在学习所以这可能是一个微不足道的问题.

在yesod scaffolding工具生成的代码中,我找到了这个表达式:

type YesodPersistBackend PersistTest = SqlPersist
Run Code Online (Sandbox Code Playgroud)

我的理解是它创建了一个参数化类型YesodPersistBackend,它有一个类型参数PersistTest,这相当于类型SqlPersist.

它是否正确?如果是这样,为什么会为没有参数的类型创建一个带有参数的类型同义词?

haskell type-families yesod

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

Yesod系统要求是什么?

我正在寻找一个VPS来部署Yesod网站,我想知道运行Yesod的系统要求是什么?我将使用Nginx和Warp作为系统配置.

haskell yesod

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

我的编译器错误是否真的与quasiquote有关,还是更微妙?

我正在关注如何使用monadic形式的yesod书籍示例.我的getRootR动作几乎是从书中逐字记录下来的.我得到了一个编译器错误,剥离了quasiquote但仍然得到了错误.下面是我的错误消息,代码是原样,然后是我想要的getRootR.关于问题可能是什么的任何输入将非常感激.

ghci Rocko.hs

...几个"包装"消息传递到......

Rocko.hs:67:5:

Couldn't match type `handler'
               with `GGHandler
                       Scheduler
                       Scheduler
                       (Data.Enumerator.Iteratee Data.ByteString.Internal.ByteString IO)'
  `handler' is a rigid type variable bound by
            the type signature for getRootR :: handler RepHtml at Rocko.hs:65:1
Expected type: handler RepHtml
  Actual type: GGHandler
                 Scheduler
                 Scheduler
                 (Data.Enumerator.Iteratee Data.ByteString.Internal.ByteString IO)
                 RepHtml
Expected type: handler RepHtml
  Actual type: GHandler Scheduler Scheduler RepHtml
In the return type of a call of `defaultLayout'
In the expression:
  defaultLayout
    (addHtml
       ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
          "<p>Result: </p>")) …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

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

哈斯克尔:Yesod和州

我正在阅读Toy URL Shortener的代码.然而,有一些重要的部分我无法理解.

它具有以下代码:

data URLShort = URLShort { state :: AcidState URLStore }
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我在自己的应用程序中写了这样的东西:

data MyApp = MyApp { state :: Int }
Run Code Online (Sandbox Code Playgroud)

然后我可以通过改变来编译

main = warpDebug 3000 MyApp
Run Code Online (Sandbox Code Playgroud)

main = warpDebug 3000 (MyApp 42)
Run Code Online (Sandbox Code Playgroud)

然后,我可以通过执行操作来读取处理程序中的状态

mystate <- fmap state getYesod 
Run Code Online (Sandbox Code Playgroud)

受到acid <- fmap state getYesod文章的启发.但是,我不知道怎么写.

我也尝试过:

data MyApp = MyApp { state :: State Int Int }
Run Code Online (Sandbox Code Playgroud)

但我对此并没有做多少.

我试图AcidState通过做一些简单的类似例子来弄清楚它是如何工作的,并且认为既然AcidState将所有内容保存在内存中,我应该能够做同样的事情吗?

对这里发生的事情的任何形式的一般性解释,以及也许我如何忽略这一点都将非常感激.

state haskell acid yesod

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

解析JSON帖子

我有以下代码:

data Friend = Friend
              { friend_name :: Text
              , friend_inTwitter :: Bool
              , friend_twitterName :: Maybe Text
              }
$(deriveJSON (drop 6) ''Friend)
Run Code Online (Sandbox Code Playgroud)

这段JSON被发布到处理程序中,我很难获取它。我尝试了不同的方法,但让我将其中之一放在此处以产生建议:

postTestR :: Handler RepPlain
postTestR = do
value <- parseJsonBody_
return $ RepPlain $ friend_name value
Run Code Online (Sandbox Code Playgroud)

那是行不通的,我可以看到类型不匹配,但是我不确定用什么替换它。我还想看看如何解析以JSON形式发布的列表好友。

谢谢!

yesod

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

最小的haskell(ghc)程序安装(没有ghc/cabal的部署)

(我的问题是关于没有haskell-platform,ghc,cabal等的分发二进制文件)

我需要部署一个良好的cabal形成haskell应用程序(一个Yesod脚手架),但我有磁盘空间限制.

GHC大小约为1Gbytes,存储所有cabal源代码,包等...需要更多磁盘空间等...

显然,haskell-platform,ghc,...是关于开发(不是部署).

在我的具体情况下,我可以生成

cabal clean && cabal configure && cabal build
Run Code Online (Sandbox Code Playgroud)

并成功运行(有些像)

./dist/build/MyEntryPoint/MyEntryPoint arg arg arg
Run Code Online (Sandbox Code Playgroud)

但是,依赖关系呢?如何将其转移到生产环境?(连同我的"dist"汇编)

我可以在没有cabal的情况下放置二进制依赖项 怎么样?

非常感谢你!

deployment haskell static-linking yesod

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

手动呈现路线的URL

我正在尝试渲染一个包含href值为的链接的页面"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet有一些Javascript会将当前页面添加到<script>标记中src="http://e.g.com/static/myFullJsFile.js".

我有几个问题,但主要的一个是令人尴尬的简单:

给定一条路线 - 例如StaticR myFullJsFile_js- 如何将路线的URL渲染为字符串,以便将其嵌入mySmallJsSnippet?基本上,我不知道如何在我的处理程序代码中执行Yesod的模板渲染机制自动执行的操作@{fooBaR}.

我怀疑它有做renderRoutejoinPath,但我没有使用joinPath正确的.到目前为止,我最好的猜测是App从Foundation.hs 导入并将其作为joinPath第一个参数传递- 不行.

我会继续寻找,但是能得到一些帮助会很棒,因为我确信对于有过Yesod经验的人来说这很简单.

haskell yesod

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

为持久性实体创建ToJSON实例

我正在尝试使用selectRepYesod 1.2中的新功能,但是我无法让json响应工作.

instance ToJSON (Entity Feed) where
    toJSON (Entity uid (Feed url lastUpdated)) = object 
        [ "id" .= uid
        , "url" .= url
        , "lastUpdated" .= lastUpdated
        ]

getFeedByIdR :: FeedId -> Handler TypedContent
getFeedByIdR feedId = do
    feed <- runDB $ get404 feedId
    selectRep $ do
        provideRep $ return $ toJSON (Entity feedId feed)
Run Code Online (Sandbox Code Playgroud)

我从上面的代码得到的错误是

Handler/Feed.hs:23:31:
    Overlapping instances for ToJSON (Entity Feed)
      arising from a use of `toJSON'
    Matching instances:
      instance ToJSON e => ToJSON (Entity e) …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

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

使用Conduits从rawQuery中获取数据

我承认,鉴于我有限的Haskell知识,我并不太了解Conduits.所以,如果有人可以指导我如何完成这项任务,那就表示赞赏:我想获取rawQuery动作的输出并将其存储在一个变量中,然后我可以在我的Hamlet文件中再次使用它.例如:

let sql = "SELECT sum(value) as total, category FROM person GROUP BY category ORDER BY total desc;"
   --- ??  how to store this runDB output in a variable?
runDB $ rawQuery sql [] $$ CL.map (convertFromPersistent) 
where 
    convertFromPersistent [] = Nothing
    convertFromPersistent [PersistInt64 sum,PersistInt64 category] = Just (sum,category)
    convertFromPersistent _ = Nothing
Run Code Online (Sandbox Code Playgroud)

当我做

runDB $ rawQuery sql [] $$ CL.mapM_ (liftIO. print. convertFromPersistent) 
Run Code Online (Sandbox Code Playgroud)

我在日志文件中看到了输出.但是,我想将输出传递给元组数组,以便我可以在我的Hamlet文件中使用它.感谢您的帮助!

谢谢,

haskell yesod conduit

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