Haskell'de iki basit veri türüm var:MongoDB iç içe geçmiş verilerle Haskell türlerini kullanmanın doğru yolu nedir?
data Ticket = Ticket {
tbody :: String,
tauthor :: String,
tcomments :: [TicketComment]
}
data TicketComment = TicketComment {
tcbody :: String,
tcauthor :: String
}
Zaman damgası yokluğu ve dizgilerle bytestrings kullanımı bir an için göz ardı edersek, yalnızca MongoDB'deki yorumları biletlerinde saklamak istiyorum.
Şimdiye kadar veri depolamak için oldukça basit bir örnek kullanıyorum:
class MongoIO a where
transout :: a -> [Field]
transin :: [Field] -> (Maybe a)
Uygulama daha sonra şöyle görünüyor:
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)
Beklendiği gibi, bu durum ("comments" =: tcomments a)
. Kendi bilgimin eksik olduğu bir Haskell türü alanına girdiğimden eminim, bu yüzden başkalarının buna nasıl yaklaşacağını duymak beni heyecanlandırıyor.
Ugh ... çok basit. Teşekkür ederim, neden bundan daha karmaşık olacağını düşündüğümden emin değilim. – clintm