Yura
Эксистенциальный тип не прокатит?
Andrey
Возможно, но я не сталкивался с ними близко - есть понятное введение?
Евгений
Да, но вы можете в один словарь положить по ключу инт и по ключу стринг? А в сабже придется городить тип-сумму
Но это обычно плохой практикой считается, мне кажется, что строчек как ключей достаточно. Тут можно скатиться в перлизм "всё есть строка"
Andrey
Ну "плохая практика" это оценочно и религиозно. Так можно дойти до ненужности гетерогенных списков )
Евгений
Эксистенциальный тип не прокатит?
С экзистенциалами мы придём уже к эмуляции класс-ориентированного (или скорее интерфейс-ориентированного, в духе го) программирования
Andrey
Мне бы понравилось, если бы все функции могли принимать условно любой тип и внутри по кейсам определять свое поведение в зависимости от WHNF типа - но без того чтобы городить этот универсум-тип-сумму руками явно. И думаю (надеюсь) Dynamic здесь будет ближе к желаемому. Хотя я мало его пробовал - поэтому и хотел посмотреть как это делают умельцы.
Andrey
Тут же (при таком выборе) еще и гетерогенные коллекции (по значениям) бесплатно получаем - так?
Andrey
Помню, кто-то написал статью "Хаскель - мой любимый императивный язык", продемонстрировав (о боже) как в ИО-монаде с дунотацией можно писать на нем в махровом императивном стиле.
Andrey
Я бы очень хотел почитать такую же статью, только с заменой слова "императивный" на "динамический" - тем более все утверждают, что это можно
Andrey
А так даже на банальном примере - мне надо полиморфную по типу функцию, которая будет печатать любой тип - если он инстанс Show - то брать его show, если нет - то писать "какая-то хрень". Но я навскидку не скажу как я могу написать в коде условие имплементации типом нужного класса
Andrey
Мне хочется проверять в функции мое прилетевшее значение на то что оно умеет, и в зависимости от этого делать разное. А не чтобы мне компилятор гарантировал что оно это точно умеет из типа.
Andrey
И в идеале, чтобы это все не требовало переделки в множестве мест при расширении типов
Евгений
Я бы очень хотел почитать такую же статью, только с заменой слова "императивный" на "динамический" - тем более все утверждают, что это можно
Ну предполагается, что можно, если ты бойлерплейта много пишешь. По сути мы переносим синтаксис динамического языка на конструкторы нашего универсального типа. Была лямбда -- у нас конструктор Fn, был дикт или {, у нас Map, был литерал -- у нас String и т.д. Т.е. можно на динамический язык как на маленькое подмножество статического языка. А дальше есть проблема с тем, чтобы не пытаться размыть границы. То есть пока мы в узком мирке динамичности существуем всё хорошо (как в мирке IO в вашем примере выше). Как только мы выходим в жестокий мир остальных типов, но всё становится намного грустнее, потому что системф, типы с хитрыми кайндами или осколки зависимых типов просто не существуют во время рантайма. И вы с этим ничего не поделаете, вам просто некуда будет навесить тег об их поведении, понимаете? То есть скорее
Andrey
Ну если брать аналогию из "императивной статьи" - там все получается красиво и элегантно - никто не запрещает нам написать сколько угодно чистых функций вне ИО и потом использовать их в ИО. И никаких жестких границ и проблем размытия - все очень гармонично
Andrey
Если позволите аналогию с вульгарным ООП (джава) - то там я с типами могу провернуть точно такую же элегантную штуку по слиянию границ. Нужна мне функция на Интеджере - указываю ее тип максимально узким и ноннулабл. Надо расширить ее поведение на возможность принимать нулл (вульгарная Мэйби-монада для бедных) - убираю ноннулабл и пишу отработку нулла в ее теле - и все! И ничего больш ене переписываю и все работает! Надо расширить ее до Интов или Даблов - меняю тип аргумента на Интерфейс - и то же самое! Она волшебно научилась принимать любой тип нужного интерфейса. Надо расширить ее космически - меняю тип аргумента на Объект и внутри отрабатываю кейсы по любому инстансеОв и дефаултом если непонятно что. Вот так, элегантно и расширяемо (не надо писать про овноархитектуру, я в курсе вашего мнения). И ничего нигде в других местах переписывать при этом не надо - наша функция полиморфится до любой степени полиморфности, при этом изменяется только ее собственный код.
Andrey
То же самое с коллекциями - надо - будут Интеджеры, надо - Интерфейсы, надо - Объекты. Я в курсе, что все считают Джаву статически типизируемым языком ) Но мне это никак не мешает в ней. Я понимаю, что это из-за ограничения ее системы типов иерархичной структурой. Но я могу написать статью в духе упомянутых выше: "Джава - мой любимый динамический язык". Причем, тут и С# и многие другие подойдут. Соль в том, что там я могу договориться с компилятором чтобы он делал только нужные мне проверки - а когда не надо, не мешал ) В сабже я так не могу и не знаю можно ли это вообще.
Dmitry
@bravit111 а будет запись лекции? или лучше, будет ли повтор лекции где-то еще?
Vitaly
Запись будет, а насчёт повтора не уверен, это ж меня кто-то позвать должен, а кому это надо...
Dmitry
у нас пересеклось с дедлайном прост
Alexander
https://mail.haskell.org/pipermail/ghc-devs/2018-April/015557.html
Anonymous
https://mail.haskell.org/pipermail/ghc-devs/2018-April/015557.html
т.е., GHC будет писаться на Visual Studio? о, и SharePoint тут же
Alexander
Да, но вы можете в один словарь положить по ключу инт и по ключу стринг? А в сабже придется городить тип-сумму
в любом динамическом языке тоже тип сумму, при этом в Haskell можно не складывать сумму, а там нельзя
Alexander
т.е., GHC будет писаться на Visual Studio? о, и SharePoint тут же
я только на 2/3 письма догадался в календарь заглянуть
Kirill
The full power of Word :)
Anonymous
😂 👍🏻
Alexander
сегодня почту открывать страшно
Alexander
все шутить будут
Alexander
вон вчера с ночи шутили что я чятике людей травлю и пруфы собирали : (
Dmitry
зачот
Dmitry
Anonymous
Письмо звучит, как реклама VS
Alexander
как издевательство над стартапами
Anonymous
> 1 Apr This might be the thing
Alexander
конечно
Dmitry
а что, team foundation еще живо?
Dmitry
а, сегодня первое апреля
Dmitry
надо отключить все каналы связи
Dmitry
хотя про ICO могли бы и провести, почему нет
Cheese
а что, team foundation еще живо?
Team Foundation server мы используем
Dmitry
@cblp_su но зачем?
Евгений
все шутить будут
То есть чатик в Logo Russian Community переименовывать не будем? :(
Евгений
Я даже черепашку припас :(
Alexander
а надо было?
Dmitry
Подскажите, а по каким причинам stack может не добавлять в exposed-modules некоторые модули?
Dmitry
У меня часть добавляется, а часть — нет.
Dmitry
Почему?
Cheese
@cblp_su но зачем?
не я выбирал. наверно, потому что вся остальная инфраструктура уже от Микрософта
Dmitry
легаси, в общем
Cheese
легаси, в общем
нет, свежее административное решение
Cheese
хотя может быть одновременно и легаси
Alexander
он же это автоматом не делает
Cheese
имелся в виду hpack, наверное
Dmitry
Ну я вызываю stack build, появляется .cabal-файл. Там часть моих модулей указана, часть пропущена
Dmitry
Не пойму такой избирательности :-/
Cheese
пиши их руками уже
Dmitry
И куда?
Dmitry
В какой файл?
Cheese
в package.yaml
Dmitry
Хм, явно какой-то глюк. Пишу в package.yaml: library: source-dirs: src exposed-modules: Ontology.Math.NumRelations
Dmitry
В cabal-файле появляется
Dmitry
Ontology.Math.NumRelationsSubstitute
Dmitry
Откуда ...Substitute?
Alexander
пиши package.cabal
Aleksei (astynax)
В питоне словари достаточно гомогенны по ключам, там только элементарные типы могут быть ключами
В питоне ключём словаря может быть любой объект, если оный имеет __eq__ и __hash__
Alexander
тогда экзестенциальные вопросы мучать не будут
Dmitry
пиши package.cabal
В смысле, вручную?
Dmitry
Не автогенерировать?
Alexander
тут подставляет, там не подставляет, здесь рыбу заворачивали
Alexander
ага
Dmitry
Так это ж не молодёжно?
Alexander
и кабал и стек сейчас говорят если модули есть
Dmitry
Надо ж на stack'е всё делать
Alexander
такие
Aleksei (astynax)
hpack не добавляет в exposed-modules то, что указано в other-modules, например
Dmitry
Не, я там всё вытер, там пусто в other-modules
Евгений
пиши package.cabal
В моё время кабал вручную только и писали. А ща развелось автогенераторов
Aleksei (astynax)
Можно почитать доку hpack. Возможно он слишком умный :) Или это бага и её надо отрепортить