我正在尝试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) 我试图弄清楚如何使用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)
我设法找到了一个 …
我正在尝试cabal install yesod在我的Windows机器上.我有一个相对全新的Haskell平台安装.cabal安装失败,报告我需要sqlite3 C库才能安装"持久",这是Yesod所依赖的软件包.
Run Code Online (Sandbox Code Playgroud)cabal: Missing dependency on a foreign library: * Missing C library: sqlite3
所以我去了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)
考虑一下模型:
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中为一个基于回合的游戏实现一个服务器.我的选择是使用Yesod进行管理和元信息(比如,用户参与的游戏等等).
我想使用网络套接字来保持游戏内数据开销很小.
看看ws-chat示例,我不确定如何访问Handler Monad并使用Persistent.
对于围绕"普通"处理程序的连接有一些簿记代码是完美的,该处理程序本身更新数据库并通知相关用户.
最近我偶然发现了以下问题:
使用yesod我想要的
FormFailure 重定向浏览器到前一页就我而言,这POST/Redirect/GET就是全部.
虽然<1-3>点需要简单直接的实现,但我发现无法实现点<4>!
所述耶索德形式包自动处理此问题,但不允许形式之间的任何重定向解析<2>和错误处理<3,4>如我想的那样.
您建议我应该序列化提交的数据,并在重定向后以某种方式将其注入表单.这会导致更详细的问题:
如何获取序列化数据?
我知道我可以使用,但哪些是相关信息(字段的s是自动生成的)?runRequestBody:: GHandler s m RequestBodyContentsname
如何将数据注入表单?
如果你看一下例如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不允许我这样做.
我该如何处理这个问题?
所以我的/ 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) 我打算写一个yesod web应用程序.而且我想知道是否有一些大型项目使用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风格,因此故意不显示研究工作!
这在所有处理程序中都会发生,但作为示例,我在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沙箱中.