У меня часто есть код, который имеет шаблон «может быть, ничего, какой-то Функ»:
instance FromJSON SaveSection where
parseJSON (Object o) =
SaveSection <$>
o .:? "eventId" <*>
(maybe Nothing parseUSDate <$> o .:? "eventDate") <*>
o .:? "eventRecId" <*>
o .:? "idxId" <*>
(maybe Nothing parseUSDate <$> o .:? "idxDate") <*>
o .:? "idxRecId"
Здесь parseUSDate
имеет тип Text -> Maybe Date
.
Анализ Aeson, очевидно, возвращает Maybe Text
.
Так что мне кажется, что мне нужно поднять 2 слоя Maybe
здесь. И я понятия не имею, как это сделать иначе, как с паттерном maybe Nothing someFunc
.
Я пропустил какую-то очевидную «сглаживание» или любую другую функцию, которую я мог бы здесь использовать?
EDIT: Спасибо за ответ Алексея.
Это именно то, что я искал. Вот конечный результат:
instance FromJSON SaveSection where
parseJSON (Object o) =
SaveSection <$>
o .:? "eventId" <*>
((>>= parseUSDate) <$> o .:? "eventDate") <*>
o .:? "eventRecId" <*>
o .:? "idxId" <*>
((>>= parseUSDate) <$> o .:? "idxDate") <*>
o .:? "idxRecId"