Haskell 是的,如何显示PersistInt64键的纯值 狗 名称文本 比赛文本 getAllDogsR::处理程序Html getAllDogsR=do 狗

Haskell 是的,如何显示PersistInt64键的纯值 狗 名称文本 比赛文本 getAllDogsR::处理程序Html getAllDogsR=do 狗,haskell,key,yesod,persist,Haskell,Key,Yesod,Persist,您需要首先从keybend中提取密钥,如下所示: Dog name Text race Text getAllDogsR :: Handler Html getAllDogsR = do Dogs<- runDB $ selectList [] [Asc DogName] defaultLayout [whamlet| <ul> $forall Entity dogid d

您需要首先从
keybend
中提取密钥,如下所示:

Dog
    name Text
    race Text

getAllDogsR :: Handler Html
getAllDogsR = do
    Dogs<- runDB $ selectList [] [Asc DogName]
    defaultLayout
        [whamlet|
            <ul>
                $forall Entity dogid dog <- Dogs
                    <li>
                        #{show $ unKey (dogid)}
       |]
你现在应该能做到了

extractKey :: KeyBackend backend entity -> String
extractKey = extractKey' . unKey
  where extractKey' (PersistInt64 k) = show k
        extractKey' _ = ""
改变


#{persistin64 x的case dogid->show$unKey x}
有效吗?不起作用不幸的是,你想要的函数是。但是,您也可以使用
模块Model.Id
用于锚定、Id等。该模块将包含用于id呈现的类:
class PersistId a其中PersistId::Key a->Text
和两个实例:
instance PersistId Dog其中PersistId=T.pack id。fromPersistValueText。unKey
将按您的要求执行。我认为这会很方便。虽然你问过如何以纯文本形式打印ID,但我怀疑你实际上只是想将ID打印给用户。如果您最终希望在URL中使用这些ID,则无需进行任何转换:
如果您能提供一个更详细的答案,并提供一个工作示例,可能还有一些上下文解释,这会有所帮助。一句话的评论更适合这样——对问题的评论。@AlexOsborn:不过,这不仅仅是一句评论。这是一个答案。它完全符合他的要求。
topathPieces
Web.PathPieces
模块的
path-pieces
包()中定义。如果您有
(键x)
,则可以使用
toPathPiece x
#{extractKey dogid}
#{show $ unKey (dogid)}
#{toPathPiece dogid}