Ich habe zwei einfache Datentypen in Haskell:Was ist der richtige Weg, um Haskell-Typen mit verschachtelten MongoDB-Daten zu verwenden?
data Ticket = Ticket {
tbody :: String,
tauthor :: String,
tcomments :: [TicketComment]
}
data TicketComment = TicketComment {
tcbody :: String,
tcauthor :: String
}
für einen Moment Ignorieren der Mangel an Zeitstempel und die Verwendung von Strings vs. bytestrings, habe ich einfach die Kommentare in MongoDB in ihre Tickets verschachtelt gespeichert werden sollen.
Bis jetzt habe ich ein ziemlich einfaches Beispiel unter Verwendung von Daten zu speichern:
class MongoIO a where
transout :: a -> [Field]
transin :: [Field] -> (Maybe a)
Die Umsetzung dann etwa wie folgt aussieht:
instance MongoIO Ticket where
transout a = [("body" =: tbody a),
("author" =: tauthor a),
("comments" =: tcomments a)]
transin a = case (,,) <$> look "body" a
<*> look "author" a
<*> look "comments" a of
Nothing -> Nothing
Just (bo,au,co) ->
Just $ Ticket (typed bo) (typed au) (typed co)
Wie zu erwarten, diese bricht an ("comments" =: tcomments a)
. Ich bin zuversichtlich, dass ich in einen Bereich von Haskell-Typen vorsteige, in denen mein eigenes Wissen fehlt. Ich bin gespannt, wie andere sich diesem Thema nähern.
Ugh ... so einfach. Danke, nicht sicher, warum ich dachte, es wäre komplizierter. – clintm