我有以下数据类型:
data User = User { name :: T.Text, bookCount :: Int ,memberSince :: DateTime ,
email :: T.Text, password :: B.ByteString }
| UnverifiedUser { nameUnverified :: T.Text, emailUnverified :: T.Text,
secret :: Integer }和以下实例:
instance FromJSON User where
parseJSON (Object o) | Just _ <- M.lookup "secret" o = UnverifiedUser <$> o .: "name" <*> o .: "email" <*> o .: "secret"
| otherwise = User <$> o .: "name" <*> o .: "bookCount" <*> o .: "memberSince" <*> o .: "email" <*> o .: "password"
parseJSON _ = mzero但是用户被一分为二,因为couchdb中的文档有时没有一些字段,比如secret或password。如何为数据类型创建fromJSON实例:
data User = User { name :: T.Text, bookCount :: Int ,memberSince :: DateTime ,
email :: T.Text, password :: B.ByteString , secret :: Integer }某些字段是必填的,而其他字段不是?
发布于 2011-09-02 13:30:37
为什么不使用Maybe
data User =
User {
name :: T.Text,
bookCount :: Int ,
memberSince :: DateTime ,
email :: T.Text,
password :: Maybe B.ByteString,
nameUnverified :: T.Text,
emailUnverified :: T.Text,
secret :: Maybe Integer}
instance FromJSON User where
parseJSON (Object o) = User <$>
o .: "name" <*>
o .: "bookCount" <*>
o .: "memberSince" <*>
o .: "email" <*>
o .:? "password" <*>
o .: "nameUnverified" <*>
o .: "emailUnverified" <*>
o .:? "secret"https://stackoverflow.com/questions/7278130
复制相似问题