Alexander
да
Alexander
стаднартный Олеггинг
Vasiliy
ага, я примерно понял
Vasiliy
впрочем, я сейчас сидя дома на vinyl сделал то, что полтора дня делал на работе руками
Leonid 🦇
что-то у меня этот ваш телеграм сам пишет в чат, прямо из гибернации
Alexander
это потому что ты точно знаешь все скандалы-интриги-расследования про него
Vasiliy
жутковатые сигнатуры получаются: event :: t ∈ m => (forall f. Lens' (Rec f m) (f t)) -> Dir -> MEvent t -> Sequence m ()
Vasiliy
но пользователю иметь дело только с Sequence '[A, B] a, так что супер
Dmitry
Vasiliy: а где ты все это применяешь вообще?
Vasiliy
тебя интересует конкретный момент со списком типов?
Vasiliy
или задача в целом?
Dmitry
Задача
кана
В сервант-сервере каждый комбинатор QueryParam/QueryFlag/QueryParams заново парсит и строит мапу квери-паромов
Dmitry
Меня впринципе интересует, где можно применять хаскель и весь этот теоркат
кана
Что-то тут не так
кана
Или в случае с ленью это не такая уж и большая проблема?
кана
Да это же не теоркат
кана
Он тайплевел-программирование у него просто
Dmitry
Ну так интересна область применнния
Vasiliy
конкретная задача - у меня есть язычок для чего-то типа диаграмм последовательностей, до сих пор все участники взаимодействия были одного типа, захотелось добавить ещё одного
кана
Применения два:
- дсл на уровне типов (хз как жить без серванта)
- "зависимые" типы для формализация и более точных типов
Dmitry
О прикольно
Vasiliy
диаграмма последовательности - это что-то такое https://www.smartdraw.com/sequence-diagram/img/sequence-diagram.jpg?bn=1510011091
Vasiliy
ну, у меня по-другому выглядит, но суть такова - показать, как объекты обмениваются сообщениями, переходы между состояниями итд
Dmitry
Ништяк!
Dmitry
Вот ей-богу достойная для х-я задача, а не все эти котики в монгодб...
Vasiliy
лол
Vasiliy
я так-то на плюсах пишу, это так, вспомогательный инструмент
Vasiliy
в продакшоне х-ь у меня так, по хттп на мелкие запросы отвечает
Vasiliy
а, ещё система сборки на нём...
кана
Вот это меня интересует, кто может сказать что? Там из реквеста достается ByteString квери, парсится в [(Text, Maybe Text)], lookup
кана
В сервант-сервере каждый комбинатор QueryParam/QueryFlag/QueryParams заново парсит и строит мапу квери-паромов
кана
Что-то тут не так
кана
Или в случае с ленью это не такая уж и большая проблема?
Dmitry
Похоже просто для души там хаскель :-)
Vasiliy
может, там мемоизация какая срабатывает?
кана
Вот меня и интересует, хаскель как-то помогает это и соптимизировать?
Dmitry
А шейк что это?
Vasiliy
если что https://hackage.haskell.org/package/shake
Vasiliy
рекомендую всем и каждому
Vasiliy
хомпага http://shakebuild.com/
Dmitry
Аа
Dmitry
Клёвая!
Vasiliy
но мне кажется, что ничего там не оптимизируется
Vasiliy
и я натыкался на тред, по-моему, на реддите, что апи лучше писать не в плоском виде, а деревом
кана
Дерево потом очень сложно в клиенты превратить
кана
Да и склеить хэндлеры сложновато
Vasiliy
т.е. type Api = "world" :> ("hello" :<|> "goodbye") вместо type Api = "world" :> "hello" :<|> "world" :> "goodbye"
Vasiliy
согласен
Vasiliy
да и пути до конкретных эндпоинтов нужны, для сваггера, например
Vasiliy
и для safe links
Vasiliy
с деревом сервер писать ещё более менее, а у клиента геморрой получается
Leonid 🦇
сервант парсит query/header только после того как статические пути все обойдёт.
кана
А, кстати, да, смысла в дереве нет, он все равно за запрос только один раз квери обработает для каждого комбинатора
кана
В одном эндпоинте
Leonid 🦇
т.е. "foo" :> QueryParam "blah" Int :> "xxx" - сначала сматчит "foo" / "xxx" и только потом будет смотреть что там в "blah"
Vasiliy
да, точно, у него же есть вот такая штука https://hackage.haskell.org/package/servant-server-0.11/docs/Servant-Server-Internal-RoutingApplication.html#t:Delayed
Leonid 🦇
вообще там где-то был принтер для дерева этого
Vasiliy
и в этот Delayed комбинаторы накидывают парсеры параметров и прочее
кана
Да, я уже с ним работал
кана
кана
Но я только теперь понял, для чего он)
Leonid 🦇
https://hackage.haskell.org/package/servant-server-0.11/docs/Servant-Server-Internal-Router.html#v:routerLayout вот ещё полезно
Cheese
@qnikst, я не смог те примеры довести до состояния, чтобы вылетела описываемая ошибка
Alexander
@cblp_su я чота с другими вещами завис
Alexander
может завтра попробую минимальный кейс собрать
Зигохистоморфный
https://twitter.com/lexi_lambda/status/910576100484382721
Кабачок
Кабачок
Надо посоветовать ему что-то подобное :D
Anonymous
у меня вскод меняет цвет скобочек в зависимости от уровня вложенности
adam
бесполезная фича
Anonymous
эстетичная как минимум
kosc
Cheese
то есть да, смесь Lisp и Haskell
Leonid 🦇
Есть под Wai более вменяемый мультипарт, нежели http://hackage.haskell.org/package/wai-extra-3.0.20.0/docs/src/Network-Wai-Parse.html?
Aleksei (astynax)
WAI низкоуровневый, он просто вычленяет multipart и обрабатывать его уже надо самому погромисту
Alexander
@lonokhov у меня через это сделано