Сохранить существующий тип данных с помощью Yesod's Persistent
Все учебные пособия и ссылки, которые я смог найти о Persistent, подробно описывают, как Persistent может автоматически создавать новый тип данных, схему, миграцию и т. Д. Из единого определения в своем DSL. Однако я не смог найти объяснения о том, как заставить Persistent обрабатывать уже существующие типы данных.
Пример: Предположим, у меня уже есть модуль Haskell для некоторой игровой логики. Он включает в себя тип записи для игрока. (Он предназначен для использования через линзы, поэтому подчеркивание.)
data Player = Player { _name :: String
, _points :: Int
-- more fields ...
}
$(makeLenses ''Player)
Вопрос: Какой канонический способ хранить такой тип в базе данных с помощью Persistent? Есть ли какой-то тип-класс, который я могу реализовать. Или мне лучше всего определить новый тип через Persistent, например
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
PlayerEntry
name Text
points Int
|]
а потом вручную сопоставлять эти типы?
playerToEntry :: Player -> PlayerEntry
playerToEntry pl = PlayerEntry (pl^.name) (pl^.points)
entryToPlayer :: PlayerEntry -> Player
entryToPlayer e = Player (name e) (points e)