我在Yesod项目的首页上找到了这段代码:
import Yesod
data HelloWorld = HelloWorld
mkYesod "HelloWorld" [$parseRoutes|/ Home GET|]
instance Yesod HelloWorld where approot _ = ""
getHome = applyLayout [$hamlet|%h1 Hello World|]
main = toWaiApp HelloWorld >>= basicHandler 3000
Run Code Online (Sandbox Code Playgroud)
使用哪些语言功能[$parseRoutes|/ Home GET|]以及[$hamlet|%h1 Hello World|]使$,|,/和%符号起作用,这些符号的作用是什么?
Haskell包依赖继续是一个问题,但我不知道如何解决这个问题.我的环境:
然后:
我得到了这个:
$ cabal install yesod
cabal: Error: some packages failed to install:
persistent-0.3.1.2 failed during the building phase. The exception was:
ExitFailure 1
yesod-0.6.6 depends on persistent-0.3.1.2 which failed to install.
$ cabal install persistent-0.3.1.2
Resolving dependencies...
cabal: cannot configure blaze-builder-0.2.0.2. It requires text ==0.10.*
For the dependency on text ==0.10.* there are these packages: text-0.10.0.0,
text-0.10.0.1 and text-0.10.0.2. However none of them are available.
text-0.10.0.0 was …Run Code Online (Sandbox Code Playgroud) 我正在使用yesod开发一个haskell web应用程序,我最终想要部署到EC2,有人可以推荐一个AMI,它有一个最近的haskell平台和一个可以从存储库安装的git客户端吗?
某些表单太复杂,不适合一页.例如,如果表单涉及大量结构化数据,例如在地图上选择位置,在日历窗口小部件中安排事件,或者根据先前的输入更改表单的某些部分,则能够在多个页面上分解某种形式.
这对于动态网页和Javascript很容易,因为人们只需创建一个包含不同页面的选项卡小部件,实际提交的表单将包含整个选项卡小部件及其所有输入字段,从而产生POST对整个操作的单个请求.
但是,有时候生成某些输入字段需要很长时间; 即使在页面生成之后,它们甚至可能是计算密集型的,对低端计算机用户的浏览器造成负担.另外,基于先前的输入创建适应自己的形式变得困难或不可能.
因此,有必要在多个完整页面请求上拆分某种形式.
这可能被证明是困难的,特别是因为表单的第一页将POST发送/location/a,其将发出重定向并由客户端/location/b请求GET.将存储的表单数据传递POST /location/a给GET /location/b难以处理的地方.
Spring Web Flow的创建者Erwin Vervaet(Spring框架的一个子项目,主要以其依赖注入功能而闻名)曾写过一篇博客文章,在所述框架中演示了这一功能,并将其与实现类似功能的Lift Web Framework进行了比较.然后,他向其他Web框架提出了挑战,这将在后面的文章中进一步描述.
Yesod将如何面对这个问题,特别是考虑到其基于REST的无状态特性?
鉴于一个刚刚搭建的Yesod应用程序,获取作为CGI程序的可执行文件所需的最小变更集是什么?包装程序是可以接受的.如果'cabal build'构建的默认可执行文件是CGI程序,则必须设置哪些环境变量才能充当CGI(默认情况下,它将绑定到端口并尝试在那里提供请求.)
对于FastCGI的类似答案也将受到赞赏.
我刚刚开始在Haskell和Yesod.为了让我的脚湿透,我将把我在MVC中编写的一个小项目转换为Haskell.我的第一步是确定所有路线.
总而言之,我有8个处理程序来运行这个项目.我的路线文件如下所示:
/activity ActivityR GET
/activity/#String ActivityItemR POST DELETE
/dashboard/month MonthDashboardR GET
/dashboard/year YearDashboardR GET
/calendar CalendarR GET
/events/calendar CalendarEventsR GET
/events/report ReportEventsR GET
/report ReportR GET
Run Code Online (Sandbox Code Playgroud)
我在添加这些路线时所经历的流程如下:
是否有快捷方式或通配符这些处理程序,以便我可以做类似的事情 Import Handler.*
或者是处理多个不同路由的处理程序模块较少的首选方法?
我目前正在Yesod网络平台上使用Haskell进行开发,我需要在我的一个网页中创建一个表单.此表单必须包含多个复选框,但需要将它们分组到类别中.例如,用户需要在10个复选框,5个项目的列表中选择3个学科,其中最多2个可以是武器.
我在Yesod网站上阅读了本书的部分内容,根据我的理解,我需要创建一个自定义字段来创建分组复选框.不幸的是,我对Haskell并不是很好(刚刚开始使用它1-2周前)而且我很难理解如何实现这一目标.作为参考,这是我在Yesod网站上读到的关于自定义字段的书的页面:http://www.yesodweb.com/book/forms
知道了,我的问题是:如何在Haskell/Yesod中创建分组复选框?
编辑:在我提供的链接中,我理解了Field(fieldView和fieldEnctype)的构造函数的最后两个值,它是第一个(fieldParse),我不知道如何为我的目的进行修改.以下是我引用的链接中的示例:
passwordConfirmField :: Field Handler Text
passwordConfirmField = Field
{ fieldParse = \rawVals _fileVals ->
case rawVals of
[a, b]
| a == b -> return $ Right $ Just a
| otherwise -> return $ Left "Passwords don't match"
[] -> return $ Right Nothing
_ -> return $ Left "You must enter two values"
, fieldView = \idAttr nameAttr otherAttrs eResult isReq ->
[whamlet|
<input id=#{idAttr} name=#{nameAttr} *{otherAttrs} type=password>
<div>Confirm:
<input id=#{idAttr}-confirm …Run Code Online (Sandbox Code Playgroud) 我想对一些文本进行url编码(例如,用%20替换每个空格等).我找到了"HTTP"Network.HTTP.Base.urlEncode并且可以使用它,但我想知道Yesod生态系统中是否还有其他通常使用的东西.
我正在尝试Data.HashMap通过按外键字段对多个Persistent实体进行分组来构建结构.比如说我有这两个实体(直接来自Yesod书)
Person
name String
age Int Maybe
deriving Show
BlogPost
title String
authorId PersonId
deriving Show
Run Code Online (Sandbox Code Playgroud)
我想要一个:
HashMap PersonId [BlogPost]
Run Code Online (Sandbox Code Playgroud)
这里的挑战是PersonId没有直接实现Hashable(来自Data.Hashable),另外它根据你正在使用的数据库进行抽象(在我的情况下是Postgres).
我想(只是一个疯狂的初学者猜测)我可以通过执行fromPersistValue和read进入Int64 实现Hashable for PersonId ,其中已经有一个Hashable实现,但我想可能有一种不太复杂的方法来实现它.
有什么建议?
Yesod中的scaffolded站点生成一个Import.hs包含以下内容的文件.
module Import
( module Import
) where
import Prelude as Import
import Yesod as Import
-- ...
Run Code Online (Sandbox Code Playgroud)
这种模式是什么?我的理解是它从Import.hs包中导入的模块中导出所有内容,但不会只是module Import where做同样的事情吗?嵌套module关键字里面的含义是什么module Import (module Import) where ...?