我正在制作一个人们可以提交文章的链接聚合器。
我的数据模型包含
Article
title Text
url Text
domain Text
我希望用户在表单中输入一个url,然后在URL上运行一个函数来提取域,然后将它们保存在数据库中。 我希望用户只需输入一次URL,如:
entryForm = renderDivs $ Article¬
<$> areq textField "Url" Nothing¬
<*> areq textField "Title" Nothing¬
但是我收到了这个错误
Couldn't match type ‘Text -> Article’ with ‘Article’
Expected type: Form Article
Actual type: blaze-markup-0.7.0.0:Text.Blaze.Internal.Markup
-> MForm
(HandlerT App IO)
(FormResult (Text -> Article),
WidgetT (HandlerSite (HandlerT App IO)) IO ())
In the expression:
renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
In an equation for ‘entryForm’:
entryForm
= renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
因为显然表单与Article类型不匹配。
我不知道该怎么办。我被告知我可以a)写一篇替代文章&#39;数据类型和两者之间的转换,或b)创建我自己的自定义字段,虽然这些对我来说似乎很难成为新手。
答案 0 :(得分:1)
我建议使用辅助函数,如:
makeArticle :: Text -> Text -> Article
获取标题和URL,从URL中提取域名,并构造Article
值。然后,您可以使用它代替直接调用Article
数据构造函数。