Welche Typklassen müssen für einen Yesod-Pfad definiert werden?
In meiner Anwendung gibt es in meinem Datenmodell mehrere verschiedene Fälle, in denen eine Ganzzahl oder eine Zeichenfolge für einen Bezeichner verwendet wird. Aus Sicherheitsgründen habe ich diese Bezeichner in neue Typdeklarationen eingeschlossen:
newtype DocId = DocId Integer
newtype GroupName = GroupName String
newtype UserName = UserName String
Wenn ich meine Yesod-Pfade einrichte, stelle ich fest, dass ich mindestens drei Instanzen für jede dieser Instanzen erstellen muss und die Instanzen fast immer identisch sind
instance Read DocId where
readsPrec prec val = case reads val of
(i, ""):_ -> [(DocId i, "")]
[] -> []
instance B.ToMarkup DocId where
toMarkup (DocId val) = B.toMarkup val
instance PathPiece DocId where
toPathPiece (DocId i) = T.pack $ show i
fromPathPiece s =
case reads $ T.unpack s of
(i, ""):_ -> Just i
[] -> Nothing
Dieser Text, immer und immer wieder.
Was muss ich wirklich einrichten, um meinen Datentyp in URLs (wie @ {ViewDocument docId}) zu rendern und diese URLs analysieren zu können?