- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为 runFormPost
生成的小部件(Html 表单)提供一些上下文。我以为我可以简单地将结果与我的上下文和模式匹配到我的 Hamlet 中的元组中,但由于 Handler Monads 而变得具有挑战性。
我有一个具有以下类型签名的 Monadic 形式:
myForm :: ModelId -> Model -> Html -> MForm Handler (FormResult MyData, Widget)
myForm rid rec extra = do
-- whamlet code here
我在 forM
中呈现一系列表单,并使用我的 Hamlet 文件中的小部件列表。一切正常。
widgets <- forM rs' $ \(Entity rid rec) ->
runFormPost $ myForm rid rec
现在,我想向每个小部件添加一些数据并将其作为元组返回。对于这个简单的例子,假设我想添加一个字符串。我尝试了以下代码,但当我尝试在我的 Hamlet 文件中使用它时它没有编译(如果我不在我的 Hamlet 文件中使用 widgets
列表它会编译)
widgets <- forM rs' $ \(Entity rid rec) ->
return ("Test", runFormPost $ myForm rid rec)
在我的 Hamlet 文件中,我尝试了类似这样的操作(x
是我的字符串上下文):
$forall (x,((res,widget), enctype)) <- widgets
<div>
<form method=post action=@{HandlerR hId} enctype=#{enctype}>
^{widget}
我收到以下错误:
Couldn't match expected type `((t0, a1), a0)'
with actual type `Handler ((FormResult MyData, Widget), Enctype)'
Expected type: [(t1, ((t0, a1), a0))]
Actual type: [(t1,
Handler ((FormResult MyData, Widget), Enctype))]
In the second argument of `Data.Foldable.mapM_', namely `widgets'
到目前为止,我已经尝试在 forM 或 map
中使用 fmap
和 liftM
,但我不断收到类似的错误。我还尝试将 Handler
放入我的模式匹配中,这给了我一个错误,提示 Handler
不在范围内。
关于如何将一些附加信息附加到小部件并在我的 Hamlet 文件中重新使用它的任何想法?
谢谢!
最佳答案
问题是 runFormPost
产生的结果被包裹在一个 monad 中,在这种情况下是 Handler
。
widgets :: (String, Handler ((FormResult MyData, Widget), Enctype)
因此,您应该使用您最初定义的未包装版本小部件来添加您的附加信息。使用您的第一个版本的 widgets::((FormResult MyData, Widget), Enctype)
,然后您可以添加行
let widgetsWithInfo = map (\w -> ("test", w)) widgets
然后在您的 hamlet 文件中,您应该嵌入 widgetsWithInfo::(String, ((FormResult MyData, Widget), Enctype)
。
关于您的附加问题:您对 fmap
的意图对我来说似乎是正确的,但是(如果它不仅仅是一个错字)您的表达式被括号括起来是不正确的。您想要将 fmap
应用于 runFormPost $ myForm rid rec
的结果,因此您必须将该子表达式括在括号中:
fmap (\x -> ("Test", x)) (rumformPost $ myForm rid rec)
关于haskell - 将 runFormPost 小部件放入元组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20943138/
我想为 runFormPost 生成的小部件(Html 表单)提供一些上下文。我以为我可以简单地将结果与我的上下文和模式匹配到我的 Hamlet 中的元组中,但由于 Handler Monads 而变
我是一名优秀的程序员,十分优秀!