Éminence grise
Для собственных - да. К сожалению для FSharpFunc - не могу
gsomix
Для собственных - да. К сожалению для FSharpFunc - не могу
В чем тогда вопрос? Мы не можем перегружать операторы для чужих типов, потому что у нас нет тайпклассов или их аналога.
gsomix
Тебе даже PR и RFC скинули на эту тему.
Éminence grise
let (>=>) f1 f2 = fun a -> match f1(a) with | Option t -> f2(t) | _ -> None let (>=>) f1 f2 = fun a -> match f1(1) with | Result t -> f2(t) | Error e -> Error e Почему нельзя так, ведь все для компилера уже известно на момент вызова?
Éminence grise
Да я по спеке понимаю. Но почему так сложно?
gsomix
Ты спрашиваешь, почему не сделали перегрузку функций?
Éminence grise
Даже недошенный CSharp может разобраться.
Éminence grise
Ну да - именоо это
gsomix
Блин, ты различаешь функции и методы?
gsomix
Хоть немного?
gsomix
Ты понимаешь, что методы прикреплены к типам?
gsomix
А функции — нет.
Vladislav
Éminence grise
Да различаю. Да понимаю. Да еще и теорию типов нзнаю. И вижу что при выводе типов этот вопрос спокойно разрешим.
Romɑn
Давайте без ругани
Romɑn
Ivan Simongauz сможешь показать как компилятор мог бы разрешить эту задачу?
Éminence grise
Я в данном случае про недошенный - это о функциональных возможностях. Ну правда, слегка рановато выбросили его как мультипарадигменный
Éminence grise
Это не оскорбление.
Dr. Friedrich
Так, что у вас тут? Оскорбляете друг друга? И меня не позвали?!
Éminence grise
let f1 = fun a -> Ok a let f2 = fun a -> Some a
Éminence grise
let f3 = fun a -> Ok a let f4 = fun a -> Some a f3 >=> f1 - тип ('T -> Option<'T>) -> ('T->Option<'T>) -> ? f4 >=> f2 - тип ('T -> Result<'T>) -> ('T -> Result<'T>) -> ? По сигнатуре понять какой оператор вызвать можно
Ayrat
перегрузка МЕТОДОВ в F# есть. перегрузки ФУНКЦИЙ в F# нет, изи
Ayrat
просто нет. С этим надо жить
gsomix
Это отказываются принимать.
Éminence grise
Да вот постояноо, что не задача, то с эти надо жить 😊
gsomix
Слушайте, это уже не первый раз же. До этого просто было нытье про тайпклассы.
gsomix
Нескончаемое.
Ayrat
Да вот постояноо, что не задача, то с эти надо жить 😊
компромиссы. Зато .NET есть со всеми нугетами, ажуром и VS
Ayrat
а вот у хаскеля нет ничерта, там всё велосипедят
Ayrat
зато перегрузка функций есть
gsomix
Через тайплклассы.
Éminence grise
Ну как тебе сказать. Все ж хаскел - это теор язык. Для ученых. Но между прочим - офигенно продвинувшийся по сравнению с .net/ Компилер у них нативный и очень не плохой
Éminence grise
Год назад,@gsomix, ты на меня за тайп классы так ругался, что чуть не забанил 😊
gsomix
Потому что код надо писать, а не витать в облаках.
Vladislav
кот*
Анна
Andrew
Он обиделся?
Ayrat
я согласен, что хаскель тянет ФП мир вперёд, вопросов нет. Но работать на нём - то ещё удовольствие. Можно, но это удел стартапов и просто случайных личностей. Бизнес едва подписывается работать под F#, хотя у него экосистема и всё такое. У хаскеля вообще ничего нет, всё руками делать надо
Vladislav
подышать вышел
Pavel
Мне кажется, или @gsomix стал каким-то нервным после отпуска?)
Ayrat
Да, стал. Не знаю чо его так от вопроса о перегрузках бомбануло)
Éminence grise
Обиделся. Если бы про код писать, я в б основной чат. А про тайп классы правда.
Pavel
Про что ныть будем когда тайп классы появятся?
Éminence grise
GADT
Ayrat
Ммм...... Депенденси тайпы
Ayrat
давно хочу
Éminence grise
Meta programming
Ayrat
линейные типы. Чтоб как в раст, без гц в компайл тайме всё было ясно
Romɑn
Он обиделся?
У него нервы.
Éminence grise
Это ты загнул. Круто бы конечно. Но без Gc всеж на функциях очень сильно напрягаться приходится. Не поймутс.
Éminence grise
Хотя я, глядя на текущий тренд, вижу, чтоООП в том виде, который был все эти годы, сильно здает. Скоро без монад на работу не возьмт 😊
Éminence grise
Там математика еще немного сложнее. И такие фокусы надо делать для двухсвязных списков...
Ayrat
да с этим ООП всё решиться не могут, то ли трусы снять, то ли крестик надеть Интерфейс может иметь дефолтные имплементации или нет? Множественное наследование и т.д.
Ayrat
они со своей теор базой определиться не могут, всё паттернами заливают
Éminence grise
Хотя конечно, если вспомнить про красно черные деревья в рослине -все туда идем
Éminence grise
Паттерн - это нелохо. Это дисциплинирует На верхних уровнях приходит прозрение. Дальше - просто программирование. А код - вроде паттерны 😊
Ayrat
паттерны это хорошо, это дистилированный опыт. Просто в отрасли пытаются знание паттернов выдать за знание ООП. Типа знаешь что такое фабрика и SOLID - всё, это ООП
Éminence grise
Я обычно отвесаю - вы извините, но как это называется , я уж лет десять как запаметовал..
Éminence grise
НЕ если еще, кто нибудь мне объяснит, чем адапер от декоратора отличается, а фабрика от конструктора.. Но кажется я не туда пошел 😊
Ayrat
НЕ если еще, кто нибудь мне объяснит, чем адапер от декоратора отличается, а фабрика от конструктора.. Но кажется я не туда пошел 😊
у адаптера контракт может сильно отличаться от контракта адаптируемого сервиса. Декоратор же обязан соблюдать контракт декорируемого Ну а с конструктором изи. Конструктор не энтерпрайзно, т.к. сильно связано. Не потестить, не заменить. А фабрика как бы и тестируема, и якобы заменяема.
Pavel
http://fssnip.net/7Vb?utm_source=dlvr.it&utm_medium=twitter
Pavel
Это тролинг?
Ayrat
http://fssnip.net/7Vb?utm_source=dlvr.it&utm_medium=twitter
вот ты шутишь, а я так делал
Ayrat
на полном серьёзе
Ayrat
я даже могу расказать зачем
Romɑn
http://fssnip.net/7Vb?utm_source=dlvr.it&utm_medium=twitter
. Is this a serious snippet or not? No category theory and mocking frameworks are required, so probably not.
Romɑn
Лол
Ayrat
Давай)
у меня был кейс что акторы должны были отправлять сообщения о очистке своего стейта раз в день, чтобы не распухать. Надо было как-то потестировать что всё работает. Не ждать же мне день? Ну вот я и замокал DateTimeOffset.NowUtc через такой же примитивный интерфейс и в тестах подменял вызов на нужное время чтобы посмотреть что актор правильно себя ведёт во времени
Ayrat
при этом я могу рассказать два других способа
Éminence grise
В DI напрямую не влезает - command, mediator, repository и т.д. Все что связанно с созданием реализации влезает - здесь я за
Bonart
да с этим ООП всё решиться не могут, то ли трусы снять, то ли крестик надеть Интерфейс может иметь дефолтные имплементации или нет? Множественное наследование и т.д.
Мне кажется современное ооп - это структуры + интерфейсы. Наследование реализации признано вредным, множественное наследование интерфейсов - полезным. Дефолтные методы интерфейсов - сахар