HTTP Lens для взаимодействия с API?

Я только начинаю набирать обороты с Haskell, и мне нравятся абстракции, с которыми я сталкиваюсь ежедневно, такие как lens,

Я дошел до того, что с линзой REST API было бы полезно поработать, но, прежде чем я потратил часы на поиск, это невозможно... не так ли?

Основная проблема, которую я вижу, заключается в том, что у меня нет прямого доступа к структуре данных, а выводится запрашиваемая строка (мой синтаксис объектива, вероятно, неверен):

λ> over (user "robertplant") . set favoritesong

POST http://...com/api/user/robertplant/favoritesong
{
  ...
}

----

λ> over (user "robertplant") . view _1

GET http://...com/api/user/robertplant/favoritesong/123

Я предполагаю, что это, по крайней мере, Аппликативная проблема, или, возможно, нужна Монада?

Я имею в виду, я мог бы представить, что этот объектив удовлетворяет законам объектива (в некотором смысле... он все еще немного размыт для меня), но я еще не видел, чтобы у объектива было оборудование для вывода строк / других структур данных, таких как этот.

Стоит ли продолжать это путешествие?

2 ответа

Нет, это не имеет ничего общего с линзами, к сожалению. Линзы - это то, что соответствует законам линз.

view l (set l v s) ≡ v
set l (view l s) s ≡ s
set l v' (set l v s) ≡ set l v' s

Возможно, в Haskell есть какая-то умная вещь, которую вы напишете для получения искомых результатов, просто она не будет связана с этой темой.

Если ваш API идемпотентен, он соответствует законам линзы.

Другие вопросы по тегам