ここで間違ったツリーを吠えているのかどうかはわかりませんが、かなりかさばるように見える Aeson のFromJSON
定義があり、それをもっと簡潔なものに変えることができるかどうか疑問に思っていました。ネストされた 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
と bothMaybe
とParser
haveMonadPlus
インスタンスです。2つを直接構成し、最後に醜いケースステートメントを削除する方法はありますか?