标签: yesod

尝试一些Yesod示例时编译错误

我正在尝试Yesod在Yesod网页上记录的书籍示例.其中一个示例是Wiki中嵌入的聊天应用程序.当我在ghci(加载Chat模块,Wiki.hs其中包含Wiki示例代码)中尝试它时,我得到以下关于Chat.hs的错误:

Chat.hs:122:34:
    Could not deduce (Text.Julius.ToJavascript Text)
      arising from a use of `Text.Julius.toJavascript'
    from the context (YesodChat master)
      bound by the type signature for
                 chatWidget :: YesodChat master =>
                               (Route Chat -> Route master) -> GWidget sub master ()
      at Chat.hs:(81,15)-(83,35)
    Possible fix:
      add an instance declaration for (Text.Julius.ToJavascript Text)
    In the first argument of `Text.Julius.Javascript', namely
      `Text.Julius.toJavascript output'
    In the expression:
      Text.Julius.Javascript (Text.Julius.toJavascript output)
    In the first argument of `Data.Monoid.mconcat', namely …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

9
推荐指数
2
解决办法
863
查看次数

在Esqueleto和Yesod中执行COUNT(id)的正确方法是什么

我试图弄清楚如何使用Esqueleto编写以下查询

SELECT COUNT("person"."id")
FROM "person"
WHERE (("person"."admin" = 't' OR "person"."vip" = 't') // 't' as in True
      OR "person"."karma" >= 5000 AND "person"."hellbanned" = 'f')
Run Code Online (Sandbox Code Playgroud)

这是我的模型的定义方式

Person
    admin Bool
    vip Bool
    karma Int
    hellbanned Bool
Run Code Online (Sandbox Code Playgroud)

除了COUNT部分之外,我已经成功获得了所有东西

select $
  from $ \p -> do
    where_
      ((p ^. PersonAdmin ==. val True) ||. (p ^. PersonVip ==. val True)
      &&. (p ^. PersonKarma >=. val 5000) &&. (p ^. PersonHellbanned ==. val False))
    return $ p ^. PersonId
Run Code Online (Sandbox Code Playgroud)

我设法找到了一个 …

haskell persistent yesod esqueleto

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

Cabal安装需要C库:Windows

我正在尝试cabal install yesod在我的Windows机器上.我有一个相对全新的Haskell平台安装.cabal安装失败,报告我需要sqlite3 C库才能安装"持久",这是Yesod所依赖的软件包.

cabal: Missing dependency on a foreign library:
* Missing C library: sqlite3
Run Code Online (Sandbox Code Playgroud)

所以我去了http://www.sqlite.org/download.html并抓住了C源代码和预编译二进制代码.我尝试使用两者,无济于事:

cabal install persistent --extra-lib-dirs=C:\Path\To\C\Source\Files
cabal install persistent --extra-lib-dirs=C:\Path\To\Binary
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我得到了相同的结果:它没有用.:(我该怎么做才能给它需要的C库?(在这种情况下是sqlite3)

sqlite haskell cabal-install yesod

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

使用yesod持续执行"加入"的正确方法

考虑一下模型:

Player
    name Text
    nick Text
    email Text Maybe
    phone Text Maybe
    note Textarea Maybe
    minutes Int Maybe
    deriving

Table
    name Text
    game Text
    pointsHour Int
    seats Int Maybe
    description Text Maybe
    deriving

GamingSession
    start UTCTime
    end UTCTime Maybe
    player PlayerId
    table TableId
    seat Int Maybe
    deriving
Run Code Online (Sandbox Code Playgroud)

和功能

getGamingSessionsR :: Handler RepHtml
getGamingSessionsR = do
  sessions <- runDB $ selectList [GamingSessionEnd ==. Nothing] [Desc GamingSessionTable]
  defaultLayout $(widgetFile ("opensessions"))
Run Code Online (Sandbox Code Playgroud)

如何获得每个相关会话的所有播放器名称?

players <- runDB $ selectList [FilterOr . map (\(Entity _ …
Run Code Online (Sandbox Code Playgroud)

haskell persistent yesod

8
推荐指数
2
解决办法
1296
查看次数

Yesod,WebSockets和Persistent

我正在尝试在Haskell中为一个基于回合的游戏实现一个服务器.我的选择是使用Yesod进行管理和元信息(比如,用户参与的游戏等等).

我想使用网络套接字来保持游戏内数据开销很小.

看看ws-chat示例,我不确定如何访问Handler Monad并使用Persistent.

对于围绕"普通"处理程序的连接有一些簿记代码是完美的,该处理程序本身更新数据库并通知相关用户.

haskell websocket yesod

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

使用yesod-form在POST/Redirect/GET后保持不正确的用户输入

最近我偶然发现了以下问题:
使用yesod我想要的

  1. 显示一个应用表单,让用户将他的数据发送给一个特殊的处理程序
  2. FormFailure 重定向浏览器到前一页
  3. 打印错误消息...
  4. ...并重新显示已填充不正确的用户提供的数据的表单

就我而言,这POST/Redirect/GET就是全部.

虽然<1-3>点需要简单直接的实现,但我发现无法实现点<4>!
所述耶索德形式包自动处理此问题,但不允许形式之间的任何重定向解析<2>和错误处理<3,4>如我想的那样.

回应Michael Snoyman的回答

您建议我应该序列化提交的数据,并在重定向后以某种方式将其注入表单.这会导致更详细的问题:

  1. 如何获取序列化数据?

    我知道我可以使用,但哪些是相关信息(字段的s是自动生成的)?runRequestBody:: GHandler s m RequestBodyContentsname

  2. 如何将数据注入表单?

    如果你看一下例如aopt的类型

    aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)
    
    Run Code Online (Sandbox Code Playgroud)

    你会发现它要求默认值与Field它的类型相同,因此无法重新插入可能无法正确解析的用户提供的数据.

    示例:用户在"a"中键入"A" intField.现在我希望能够在重定向后在同一个字段中显示"A",但API不允许我这样做.

我该如何处理这个问题?

forms haskell post-redirect-get yesod

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

在Persistent Yesod中做多对多的最佳方法是什么?

所以我的/ config/models看起来像这样.

Person
  name Text
Car
  name Text
PersonCar
  personId PersionId eq
  carId CarId eq
  UniquePersonCar personId carId
Run Code Online (Sandbox Code Playgroud)

假设数据库中的输入Person "Batman" Person "Superman" Car "SUV" Car "Ford"分别是.

我正在这样做,以便在我的处理程序中将它们链接起来.

runDB $ do
  person <- selectFirst [PersonName ==. "Batman"] []
  car    <- selectFirst [Carname ==. "SUV"] []
  let Entity personId _ = case person of
                            Just info -> infor
                            Nothing -> error "no such Person"
  let Entity carId _ = case car of
                            Just info -> infor
                            Nothing -> error "no …
Run Code Online (Sandbox Code Playgroud)

haskell persistent yesod

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

Yesod示例项目

我打算写一个yesod web应用程序.而且我想知道是否有一些大型项目使用yesod设计得很好,我可以看一下并试验一下.我正在寻找开源项目.我可以借鉴.

haskell yesod

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

在Yesod中查找查询参数

我刚刚初始化了一个Yesod项目(没有数据库)yesod init.

我的HomeRGET处理程序如下所示:

getHomeR :: Handler Html
getHomeR = do
    (formWidget, formEnctype) <- generateFormPost sampleForm
    let submission = Nothing :: Maybe (FileInfo, Text)
        handlerName = "getHomeR" :: Text
    defaultLayout $ do
        aDomId <- newIdent
        setTitle "Welcome To Yesod!"
        $(widgetFile "homepage")
Run Code Online (Sandbox Code Playgroud)

使用时yesod devel,我可以访问默认主页http://localhost:3000/.

如何修改上面列出的处理程序以检索(和显示)HTTP GET查询参数,例如id=abc123访问此URL时:

http://localhost:3000/?id=abc123

注意:这个问题已经回答Q&A风格,因此故意不显示研究工作!

haskell query-parameters yesod

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

yesod devel在更改后编译,但实际上并不反映更改

这在所有处理程序中都会发生,但作为示例,我在vim中编辑了一个简单的处理程序:

getListingR :: Handler Html
getListingR = do
  defaultLayout $ do
    setTitle "Thing"
    [whamlet|<p>Content|]
Run Code Online (Sandbox Code Playgroud)

yesod devel 启动服务器,有时服务于此.

但是,当我更改setTitle调用(甚至不是quasiquoter,只是文字字符串)时,服务器进程会识别更改,启动重新编译,并提供"等待重新编译"页面.

但完成后,它会回到提供旧内容.

我之前说'有时候',因为它似乎没有在新yesod devel发布时获得最新的变化.A cabal build似乎总能找到变化.

我正在运行GHC 7.10.1,在每晚锁定堆叠的cabal沙箱中.

haskell yesod

8
推荐指数
0
解决办法
102
查看次数