Dmitry
Vladislav
С подключением
Dmitry
А, вижу
Но все равно каеф, можно будет как белый человек стрелять
Vasily
Да там особо не мешало как бы
Ilya
Ооо, зря я когда-то наезжал на canopy за отсутствие нормальной документации. Сегодня от скуки полез в исходники на гитхаб и нашёл нормальное описание интересующей функции в release notes за 2014 год😆
Vasily
Там для adaptive подвезли документ
x
А f# поддерживает dlr? dynamic который
Vasily
Чот не помню
Romɑn
Romɑn
MyDynamicObj?SomeField
Romɑn
x
Я хз. В сисярпе обявляешь переменную dynamic и погнал
x
Так хотел спросить — если поддреживает, то чем оно код подкомпиливает?
Romɑn
https://github.com/fsprojects/FSharp.Interop.Dynamic
Romɑn
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
Romɑn
Но ты прав
Крылатый
Это хорошо. Человекам нужно больше еды.
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
Ayrat
но это же не рокет саенс, это мать его, хттп
Doge
I - тип входных параметров, E - тип ошибки, R - тип окружения, O - тип возвращаемого значения
Bonart
Имплисит тут аки вишенка на торте
Doge
но это же не рокет саенс, это мать его, хттп
Это тапир же, аналог хаскелевского серванта.
Возможность получать по одному описанию сервиса, его сервер, клиент и сваггер описание.
Причем без всякой рефлексам, с компайл тайм проверками и т.д.
Vladislav
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, ?]] = {
Диёр
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
Ayrat
Диёр
Обмажутся своими абстракциями, а потом идут в чулан друг друга в задницы долбить пока код компилится
Ayrat
особенно вот этот вот
logger <- logger
Ayrat
нормально, да
Doge
ну почти всё так-то
Ну это обобщенный код инфраструктуре, логично, что он будет с кучей параметров.
Все равно, что ругаться, что в инфраструктуре asp.net куча атрибутов, рефлексии и т.п.
Ayrat
я б хотел посмотреть на реальное приложение где нужно резолвить логгер
Ayrat
щас вот соседняя команда делает апишечку. Выбрали play
Похоже что это какой-то спринг скала разлива
Ayrat
Bonart
Смех смехом но брать откуда-то глобальный всегда хуже, чем резолвить
Ayrat
Roman
Roman
или это не тот глобальный?
Ayrat
Bonart
Угу. Проверял. Любой эквивалент глобальной переменной сосет
Ayrat
Ayrat
!!11
Диёр
Может ли считаться функция чистой, если при одних и тех же аргументах после редукции умирает и рождается какое-то случайное количество людей
Ayrat
Roman
Roman
Если функция работает в бэкэнде ЗАГСа - то скорее всего нет, если в другом месте - то возможно да
Shub
Doge
Shub
я попробую немного точнее выразиться. каким образом можно понять требования к типам по этой сигнатуре?
Shub
Shub
Doge
Shub
Doge
Shub
У зио так параметры в типе расположены.
моя проблема вот в чем: я смотрю на эти сигнатуры и они мне ровным счетом ничего не говорят. но существуют люди, которые как-то извлекают из них какую-то семантику. когда их становится больше одного, то они даже ведут какую-то беседу по этой сигнатуре, и беседа производит впечатление осмысленной
Shub
хочу выяснить, как это им удается.
Shub
если надо читать документацию - то это одно, но если там есть какая-то негласная конвенция (а-ля позиция параметра типа играет роль, общепринятая переменная типа) - то это несколько другое
Doge
моя проблема вот в чем: я смотрю на эти сигнатуры и они мне ровным счетом ничего не говорят. но существуют люди, которые как-то извлекают из них какую-то семантику. когда их становится больше одного, то они даже ведут какую-то беседу по этой сигнатуре, и беседа производит впечатление осмысленной
Ну тут конкретно требуется знание ZIO, это да.
В других случаях может быть проще:
Если у нас есть сигнатура, например, forall a. a -> a, то функций, которые могут её реализовать (в предложении, что язык тотальный) - ровно одна с понятной реализацией.
Такой ход мысли работает для более сложных случаев, где вариантов написания функции для данной сигнатуры будет не очень много.
Научный взгляд на такой подход есть в статье "Theorems for free!", если правильно помню название
Надо добавить, что такой подход в языках типа скалы гарантий не даёт (если исключения, рефлексия и т.п.), но общий ход мысли можно использовать.
Doge
Он интересно работает в пруверах, где для некоторых сигнатур компилятор может сам подсказать нужное значение, т.к. их в сильно обобщённом коде будет не много
Doge
Вплоть для единственной, как для identity
Shub
ну это все хорошо. в теории. с точки зрения теории, теория и практика - это одно и то же. но на практике это разные вещи.
Shub
на практике я лично не могу полагаться вообще ни на какие обещания, кроме тех, что железно и гарантированно реализованы в языке. потому что в тот момент, когда мне рассказывают про внутреннее изящество чисто функциональных языков, про тотальность и про невероятные возможности компилятора следующей версии скалы (запланирован на 2038), Раджив и Куай-Лю импортируют в наш проект велью в промышленных масштабах