Bestehenden Datentyp mit Yesod's Persistent @ speiche

Alle Tutorials und Referenzen, die ich zu Persistent finden konnte, beschreiben sehr detailliert, wie Persistent automatisch einen neuen Datentyp, ein neues Schema, eine neue Migration usw. aus einer einzelnen Definition in seiner DSL erstellen kann. Ich konnte jedoch keine Erklärung finden, wie ich Persistent dazu bringen kann, mit bereits vorhandenen Datentypen umzugehen.

Ein Beispiel Angenommen, ich habe ein bereits vorhandenes Haskell-Modul für eine Spielelogik. Es enthält einen Datensatztyp für einen Spieler. (Es soll durch Linsen verwendet werden, daher die Unterstriche.)

data Player = Player { _name   :: String
                     , _points :: Int
                     -- more fields ...
                     }
$(makeLenses ''Player)

Frage Was ist der kanonische Weg, um einen solchen Typ in einer Datenbank mit Persistent zu speichern? Gibt es eine Typenklasse, die ich implementieren kann? Oder sollte ich einen neuen Typ am besten über Persistent definieren, z. B.

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
PlayerEntry
    name Text
    points Int
|]

und dann manuell zwischen diesen Typen zuordnen?

playerToEntry :: Player -> PlayerEntry
playerToEntry pl = PlayerEntry (pl^.name) (pl^.points)

entryToPlayer :: PlayerEntry -> Player
entryToPlayer e = Player (name e) (points e)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage