Как получить идентификатор пользователя из сеанса в (Проект Yesod / Haskell

ребята, у меня есть небольшой проект, и мне нужно извлечь идентификатор пользователя из сеанса.

Я не могу поместить его в Text/Int, потому что он говорит, что сеанс несет ключ (я думаю, Sql Key), как я могу преобразовать его в Int для использования в других методах из моего проекта

Я пытался сделать это, чтобы восстановить идентификатор из сеанса

getInicioR :: Handler Html
getInicioR = do
        uid <- lookupSession "_ID"
        user <- runDB $ get404 uid 

Показывает следующее сообщение об ошибке:

Couldn't match expected type ‘Key t0’ with actual type ‘Maybe Text’
In the first argument of ‘get404’, namely ‘uid’
In the second argument of ‘($)’, namely ‘get404 uid’

person Jonas F    schedule 08.06.2016    source источник


Ответы (1)


Используйте keyToValues, чтобы получить список PersistValue значений.

keyToValues :: Key record -> [PersistValue]

Если вы знаете, например, что ключ является текстовым значением, тогда ваш список будет состоять из одного значения PersistText, и вы можете действовать следующим образом:

do uid <- lookupSession "_ID"
   let pvals = keyToValues uid
       [ PersistText txt ] = pvals
   liftIO $ print pvals            -- to see what pvals is
   -- now txt is a Text value
   ...
person ErikR    schedule 08.06.2016