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 есть какая-то умная вещь, которую вы напишете для получения искомых результатов, просто она не будет связана с этой темой.