Я читал учебник wreq:
Объектив обеспечивает возможность сосредоточиться на части значения Haskell. Для Например, тип
Response
имеет объективresponseStatus
, который фокусируется на информации о состоянии, возвращаемой сервером.ghci> r ^. responseStatus Status {statusCode = 200, statusMessage = "OK"}
Оператор
^.
принимает в качестве первого аргумента значение, а объектив - как во-вторых, и возвращает часть значения, сфокусированного объективом.Мы составляем линзы с использованием функционального состава, что позволяет нам легко сосредоточиться на части глубоко вложенной структуры.
ghci> r ^. responseStatus . statusCode 200
Я не могу придумать, как состав функций, выполненный с помощью этого порядка аргументов, может обрабатывать структуру вложенности в этом порядке.
Посмотрите: r ^. responseStatus . statusCode
может быть либо r ^. (responseStatus . statusCode)
, либо (r ^. responseStatus) . statusCode
.
В первом говорится, что мы строим функцию, которая первая рассматривает statusCode
(получает ее из записи Status
?), как я могу вывести из показанного значения Status {statusCode = 200, statusMessage = "OK"}
), а затем передает его на responseStatus
, который должен обрабатывать статус ответа. Итак, это наоборот: на самом деле код статуса является частью статуса ответа.
Второе чтение также не имеет смысла для меня, потому что оно сначала обрабатывает код состояния.