我不确定我是否在这里找错了树,但我有一个 AesonFromJSON
定义,看起来相当庞大,我想知道它是否可以变成更简洁的东西。如果 URI 的嵌套解析失败,我想缩短整个对象的解析。
data Link = Link { link :: URI
, tags :: [String]
} deriving (Show, Typeable, Eq)
instance FromJSON Link where
parseJSON :: Value -> Parser Link
parseJSON (Object o) = do
linkStr <- o .: "link"
tags' <- o .: "tags"
case parseURI linkStr of
Just l -> return $ Link l tags'
Nothing -> mzero
parseJSON _ = mzero
parseURI
isparseURI :: String -> Maybe URI
和 both的类型Maybe
以及Parser
具有MonadPlus
实例。有没有办法将两者直接组合并在最后删除丑陋的case语句?