У меня возникает следующая ошибка при попытке получить список сущностей из списка внешних атрибутов.
Handler/ContactList.hs:21:57:
Couldn't match type `PersistMonadBackend m0'
with `persistent-1.3.0.6:Database.Persist.Sql.Types.SqlBackend'
The type variable `m0' is ambiguous
Possible fix: add a type sig`enter code here`nature that fixes these type variable(s)
Expected type: PersistEntityBackend User
Actual type: PersistMonadBackend m0
In the expression: `enter code here`get
In the expression: (get $ ((contactContact val) :: UserId))
In the first argument of `map', namely
`(\ (Entity key val) -> (get $ ((contactContact val) :: UserId)))'
Приведенный ниже код получает сущность List, которая имеет связь «один ко многим» с контактом. В модели контактов есть атрибут, называемый контактом, для представления ограничения внешнего ключа для пользователя (тип контакта — UserId). Я пытаюсь получить список контактов (список идентификаторов пользователей) и выполнить получение карты для получения списка пользовательских объектов.
Насколько я понимаю, существует проблема обобщения типов при использовании get для Contact Entity с типом UserId, но я не могу понять, с каким типом он может работать.
getContactsR :: Handler Html
getContactsR = do
muser <- maybeAuth
case muser of
Just (Entity userId user) -> do
(list, contacts) <- runDB $ do
maybeList <- getBy (UniqueList userId)
case maybeList of
Just (Entity listId list) -> do
contacts' <- selectList [ContactList ==. listId] []
let contacts = map (\(Entity key val) -> (get $ ((contactContact val) :: UserId) )) contacts'
return (list, contacts')
Nothing -> error "Could not retrieve contact list"
defaultLayout $(widgetFile "contacts")
Nothing -> do
setMessage $ toHtml ("Error getting contact list" :: Text)
redirect HomeR
заранее спасибо