Happstack 短期集中講座のブログを拡張して、いくつかの機能を追加しようとしています: ホームページにすべてのタグのリストを表示します。
私のブログ記録は次のようになります。
data Blog = Blog
{ nextPostId :: PostId
, posts :: IxSet Post
, allTags :: [Text]
}
deriving (Data, Typeable)
次の方法でIDごとにブログ投稿を取得します(クラッシュコースからコピーペースト):
-- Models.hs
postById :: PostId -> Query Blog (Maybe Post)
postById pid =
do Blog{..} <- ask
return $ getOne $ posts @= pid
-- Controller.hs
viewPage :: AcidState Blog -> ServerPart Response
viewPage acid =
do pid <- PostId <$> lookRead "id"
mPost <- query' acid (PostById pid)
...
-- mPost has type Maybe Post here
...
そして、それは問題なく動作します。
同様の方法ですべてのタグのクエリを実行しようとすると:
-- Models.hs
getTags :: Query Blog [Text]
getTags =
do Blog{..} <- ask
return allTags
-- Controller.hs
serveTags :: AcidState Blog -> [Text]
serveTags acid = query' acid GetTags
うまくいきません。エラー スタック トレースは次のとおりです。
Blog/Controllers.hs:154:18:
Couldn't match type `[Text]' with `Text'
Expected type: [Text]
Actual type: [acid-state-0.8.1:Data.Acid.Common.EventResult
GetTags]
In the return type of a call of query'
In the expression: query' acid GetTags
の戻り値の型が であるはずなのに、なぜ なのかわかりquery'
ませ[EventResult GetTags]
ん[Text]
。
このエラーの理由は何ですか? それを修正する方法はありますか?