Dmitry
Опа на
Vladislav
С подключением
Dmitry
А, вижу Но все равно каеф, можно будет как белый человек стрелять
Vasily
Да там особо не мешало как бы
Ilya
Ооо, зря я когда-то наезжал на canopy за отсутствие нормальной документации. Сегодня от скуки полез в исходники на гитхаб и нашёл нормальное описание интересующей функции в release notes за 2014 год😆
Vasily
Там для adaptive подвезли документ
x
А f# поддерживает dlr? dynamic который
Vasily
Чот не помню
Romɑn
MyDynamicObj?SomeField
x
Я хз. В сисярпе обявляешь переменную dynamic и погнал
x
Так хотел спросить — если поддреживает, то чем оно код подкомпиливает?
Romɑn
https://github.com/fsprojects/FSharp.Interop.Dynamic
x
Хз, надо вчитываться )
x
В сишарпе они прямо c++ куски из csc переписали на си шарпе
Vladislav
http://h2.jaguarpaw.co.uk/posts/good-design-and-type-safety-in-yahtzee/
Romɑn
https://twitter.com/aarexer/status/1180864712705228801?s=19
Ilya
Так это и не только с языками так. Классическая попытка "продать". А уж пылесос или язык -- это детали.
Romɑn
Но ты прав
Shub
Так это и не только с языками так. Классическая попытка "продать". А уж пылесос или язык -- это детали.
Если это так, то это - очередной виток классовой борьбы: капитал пытается экспроприировать средства производства
Крылатый
Это хорошо. Человекам нужно больше еды.
Ayrat
Тут в скала чате линка интересная. хттп сервер значит https://github.com/DmytroOrlov/dummy-distage/blob/master/src/main/scala/dummy/zio_env/ZioMain.scala
Ayrat
Призываю всех посмотреть на это чудо
Ayrat
def toZioRoutes[R, I, E, O](e: Endpoint[I, E, O, EntityBody[RIO[R, ?]]], logic: I => ZIO[R, E, O])(implicit serverOptions: Http4sServerOptions[RIO[R, ?]]): RouteF[RIO[R, ?]] = {
Ayrat
это одна строчка если чо
Doge
def toZioRoutes[R, I, E, O](e: Endpoint[I, E, O, EntityBody[RIO[R, ?]]], logic: I => ZIO[R, E, O])(implicit serverOptions: Http4sServerOptions[RIO[R, ?]]): RouteF[RIO[R, ?]] = {
Так все понятно же, мы получаем на вход описание эндпоинта, логику эндпоинта и по ним плачем получаем соответствующий route для сервера
Ayrat
но это же не рокет саенс, это мать его, хттп
Doge
I - тип входных параметров, E - тип ошибки, R - тип окружения, O - тип возвращаемого значения
Bonart
Имплисит тут аки вишенка на торте
Doge
но это же не рокет саенс, это мать его, хттп
Это тапир же, аналог хаскелевского серванта. Возможность получать по одному описанию сервиса, его сервер, клиент и сваггер описание. Причем без всякой рефлексам, с компайл тайм проверками и т.д.
Doge
А правда что скала разработчиков на пенсию раньше отправляют?
Не знаю, я так и не понял, что здесь прям дико страшного
Диёр
Обмажутся своими абстракциями, а потом идут в чулан друг друга в задницы долбить пока код компилится
Ayrat
особенно вот этот вот logger <- logger
Ayrat
нормально, да
Doge
ну почти всё так-то
Ну это обобщенный код инфраструктуре, логично, что он будет с кучей параметров. Все равно, что ругаться, что в инфраструктуре asp.net куча атрибутов, рефлексии и т.п.
Ayrat
я б хотел посмотреть на реальное приложение где нужно резолвить логгер
Ayrat
щас вот соседняя команда делает апишечку. Выбрали play Похоже что это какой-то спринг скала разлива
Doge
я б хотел посмотреть на реальное приложение где нужно резолвить логгер
Ну его можно создавать по месту даже с котами, но тут авторы решили по zio'ки сделать, чтобы капабилити для его использования через zio environment параметр протолкнуть
Bonart
Смех смехом но брать откуда-то глобальный всегда хуже, чем резолвить
Roman
или это не тот глобальный?
Bonart
Угу. Проверял. Любой эквивалент глобальной переменной сосет
Bonart
тут другой вид резолва как бе
Да, поэтому читаю с интересом
Ayrat
!!11
Диёр
Может ли считаться функция чистой, если при одних и тех же аргументах после редукции умирает и рождается какое-то случайное количество людей
Roman
Если функция работает в бэкэнде ЗАГСа - то скорее всего нет, если в другом месте - то возможно да
Doge
откуда тебе это понятно, если не секрет?
Из-за того, как параметры вместе с ZIO используются
Shub
Из-за того, как параметры вместе с ZIO используются
то есть ты читал сорсы ZIO и теперь понимаешь, что означает каждый из параметрических типов?
Doge
то есть ты читал сорсы ZIO и теперь понимаешь, что означает каждый из параметрических типов?
Сорсы я когда-то давно мельком смотрел. А так с зио немного работал.
Shub
я попробую немного точнее выразиться. каким образом можно понять требования к типам по этой сигнатуре?
Doge
я попробую немного точнее выразиться. каким образом можно понять требования к типам по этой сигнатуре?
Что означают R, E, O - становится понятно из их использования в ZIO. Что означает I - более-менее становится понятно из сигнатуры logic. Что делает endpoint можно предположить по названию (точно так же с RouteF) и набору аргументов от которых от зависит.
Doge
там есть какая-то конвенция на названия типов? ну, типа, если ты видишь параметр типа R - то это обязательно запрос
Нет, это из того, какой аргумент где в зио расположен: ZIO[R, E, O] ~ семантически ~ R => IO[Either[E, O]]
Shub
Что означают R, E, O - становится понятно из их использования в ZIO. Что означает I - более-менее становится понятно из сигнатуры logic. Что делает endpoint можно предположить по названию (точно так же с RouteF) и набору аргументов от которых от зависит.
очень опасная логика. если ей следовать, то легко дойти до незабвенного — Серого дрозда следует называть рябинником, или рябиновкой, господин шеф, — подтвердил я, — потому что он питается рябиной. Пан Фукс отшвырнул газету и залез под бильярд, хрипя последние слова статьи: «Turdus» , груздяк! — К чёрту сойку! — орал он из-под бильярда. — Ореховка! Укушу! Еле-еле его вытащили. Через три дня он скончался в узком семейном кругу от воспаления мозга.
Doge
в смысле? позиция параметра типа играет роль?
У зио так параметры в типе расположены.
Shub
У зио так параметры в типе расположены.
моя проблема вот в чем: я смотрю на эти сигнатуры и они мне ровным счетом ничего не говорят. но существуют люди, которые как-то извлекают из них какую-то семантику. когда их становится больше одного, то они даже ведут какую-то беседу по этой сигнатуре, и беседа производит впечатление осмысленной
Shub
хочу выяснить, как это им удается.
Shub
если надо читать документацию - то это одно, но если там есть какая-то негласная конвенция (а-ля позиция параметра типа играет роль, общепринятая переменная типа) - то это несколько другое
Doge
моя проблема вот в чем: я смотрю на эти сигнатуры и они мне ровным счетом ничего не говорят. но существуют люди, которые как-то извлекают из них какую-то семантику. когда их становится больше одного, то они даже ведут какую-то беседу по этой сигнатуре, и беседа производит впечатление осмысленной
Ну тут конкретно требуется знание ZIO, это да. В других случаях может быть проще: Если у нас есть сигнатура, например, forall a. a -> a, то функций, которые могут её реализовать (в предложении, что язык тотальный) - ровно одна с понятной реализацией. Такой ход мысли работает для более сложных случаев, где вариантов написания функции для данной сигнатуры будет не очень много. Научный взгляд на такой подход есть в статье "Theorems for free!", если правильно помню название Надо добавить, что такой подход в языках типа скалы гарантий не даёт (если исключения, рефлексия и т.п.), но общий ход мысли можно использовать.
Doge
Он интересно работает в пруверах, где для некоторых сигнатур компилятор может сам подсказать нужное значение, т.к. их в сильно обобщённом коде будет не много
Doge
Вплоть для единственной, как для identity
Shub
ну это все хорошо. в теории. с точки зрения теории, теория и практика - это одно и то же. но на практике это разные вещи.
Shub
на практике я лично не могу полагаться вообще ни на какие обещания, кроме тех, что железно и гарантированно реализованы в языке. потому что в тот момент, когда мне рассказывают про внутреннее изящество чисто функциональных языков, про тотальность и про невероятные возможности компилятора следующей версии скалы (запланирован на 2038), Раджив и Куай-Лю импортируют в наш проект велью в промышленных масштабах