這是一個後續行動,我的問題在這裏:Extracting database field values inside a Handler傳遞標籤值的形式,文本/字符串
我想從數據庫中提取一些信息,並把它作爲一個形式的標籤值。但是,我收到一個類型錯誤。
一個簡單的演示之下(從耶索德書shell代碼):
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
import Control.Applicative ((<$>), (<*>))
import Data.Text (Text)
import Data.Time (Day)
import Yesod
import Yesod.Form.Jquery
data App = App
mkYesod "App" [parseRoutes|
/HomeR GET
|]
instance Yesod App
instance RenderMessage App FormMessage where
renderMessage _ _ = defaultFormMessage
instance YesodJquery App
data Person = Person
{ personName :: Text
}
deriving Show
personForm :: Text -> Html -> MForm Handler (FormResult Person, Widget)
personForm n1 = renderDivs $ Person
<$> areq textField n1 Nothing -- Changing n1 to "Name" works just fine.
getHomeR :: Handler Html
getHomeR = do
(widget, enctype) <- generateFormPost $ personForm "test"
defaultLayout
[whamlet|
<p>
The widget generated contains only the contents
of the form, not the form tag itself. So...
|]
main :: IO()
main = warp 3000 App
當我運行程序與runhaskell,我得到以下錯誤:
Couldn't match expected type `FieldSettings site0'
with actual type `Text'
In the second argument of `areq', namely `n1'
In the second argument of `(<$>)', namely
`areq textField n1 Nothing'
In the second argument of `($)', namely
`Person <$> areq textField n1 Nothing'
我也試過(FieldSettings n1 Nothing Nothing Nothing [])
但沒有運氣。有關如何將標籤值傳遞給areq的想法?
非常感謝@danvari對引用字符串的工作原因作了明確的解釋。我確實嘗試了FieldSettings方法,但是最初沒有足夠的參數,我添加了一個空列表。之後,我回來了一個類似的錯誤:無法匹配預期的類型'SomeMessage site0' 與實際類型'文本' – Ecognium
你是對的,我看了一個老版本的Yesod文檔。更新了答案。 – dnaq
謝謝!這樣可行! – Ecognium