Скажем, у меня есть JSON ByteString, который выглядит примерно так
{
messages: [
{...},
{...}
]
}
Я хотел бы использовать объектив, чтобы получить из него список/вектор сообщений. У меня есть функция toMessage
, которая может превратить Value
в Maybe Message
.
Я пробовал эту композицию key "messages" . values . to toMessage
(to
из Control.Lens.Getter
, но результат Maybe Message
и просто становится Nothing
.
В настоящее время я делаю это
msgsJson <- c ^? key "messages"
let msgs = toList $ mapMaybe message $ msgsJson ^.. values
(mapMaybe
из witherable
, toList
для преобразования Vector
в список), но я хотел бы знать, есть ли способ скомпоновать различные линзы, чтобы получить одну линзу, которая делает это.