Vasiliy
они просто есть
Зигохистоморфный
для удобной агрегации
Зигохистоморфный
это же абстракция
Влод
Ну например можно написать функцию sequence один раз вместо того чтобы для каждой монады (апликатив) отдельно
Влод
Ну это для затравки диалога вброс. Так то мне тоже не очевидно есть ли профит
Зигохистоморфный
я повторюсь - абстракция (унифицировать что-то похожее к одному стилю и не задумываться о реализации)
Anonymous
Aλeχ
пошла жара
Aλeχ
сравниваем теплое с мягким
Alexander
Влод
для инкапсуляции эффектов
вот это вот нормальный ответ?
наверное стоит всё таки действительно сменить вопрос на "зачем тайпклассы (например моноиды или функторы) в динамических языках"
Anonymous
Anonymous
нет типов — нет и тайпклассов
Aλexander
Anonymous
это как в руби рассуждения об интерфейсах.
Влод
ок можешь не продолжать
Влод
я тебя понял
Anonymous
то есть интерфейс у объекта конечно же есть
Anonymous
но чисто на уровне идеи
Влод
сейчас найдёшь ещё одну классную аналогию
Anonymous
на уровне рассуждений об объекте
Влод
вот на уровне идеи как назвать эти тайпклассы
Влод
вот эти функторы
Anonymous
в джаве вот интерфейсы есть в самом языке, но это опять же из-за наличия системы типов
Зигохистоморфный
ну грубо можно считать тайпклассы как трейты в скале
Влод
блабла нет типов нет и трейтов
Anonymous
Oleg
чисто формально, динамическая типизация /= утиная типизация
Oleg
но кого это волнует
Зигохистоморфный
Евгений
экзестенциальность?
Нет, forall в конструкторах типов в хаскеле это нелепость. Там должен быть exist
Oleg
Alexander
data Foo = exit x . Foo x
data Foo = Foo (forall x. x)
(/thread)
Alexander
*exists
Oleg
Oleg
нет типов — нет и тайпклассов
Oleg
это как в руби рассуждения об интерфейсах.
Oleg
Тип, который не проверяется статически не значит отсутствующий тип. И динамические типы вполне можно в рантайме отнести (зарегистрировать) к каким-то классам, и использовать это отношение впоследствии
Oleg
В какой-то ограниченной форме, питоновские метаклассы можно рассматривать в таком ракурсе
Anonymous
Oleg
https://clojure.org/reference/protocols
Alexander
можно ссылку на определение типа?
Alexander
т.к. теги используемые в динамических языках, я бы типами не называл
Alexander
насколько я помню в Пирсе под определение они тоже не попадают
Oleg
насколько я помню в Пирсе под определение они тоже не попадают
Цитата из Пирса
A useful—though rough—distinction divides the world of programming languages
into two parts:
* Untyped — programs simply execute flat out; there is no attempt to check
“consistency of shapes”
* Typed — some attempt is made, either at compile time or at run-time, to
check shape-consistency
Oleg
either at compile time or at run-time
Oleg
в кложурке несомненно делаются проверки в рантайме
Alexander
везде делаются проверки в рантайме..
Alexander
ну где не в компайл тайме
Oleg
не везде делаются проверки на консистентность формы
Oleg
иногда проверка есть только на факт наличия содержимого
Oleg
в кложуре ты можешь потребовать реализацию протокола от динамического типа
Oleg
Мне кажется, адепты typed racket ещё больше рассказали бы нам
Vasiliy
Oleg
Anonymous
Vasiliy
ну если тип терма определяется тем, в каком регистре он лежит, то, наверное, асм типизированный
Anonymous
в ассемблере кстати примитивная статическая система типов
Vasiliy
правда, какой тип у того, что лежит в озу?
Oleg
давайте совершим мысленный эксперимент
вам дают скрипт на Haskell, который строчка за строчкой загоняется в ghci
такой скрипт будет синтаксически сильно ограниченной версией самого Haskell
вопрос, такой динамический Haskell - он типизированный или нет?
Vasiliy
каэш, что за вопрос
Oleg
однако все проверки выполняются в рантайме
Oleg
фактически - это динамически типизированный язык
Anonymous
Они выполняются до запуска, а не вовремя работы
Oleg
до запуска чего?
Влод
ну всё. теперь хаскел зашквар(
Oleg
скрипта? - нет
Anonymous
В питоне когда вызывается typecheck? Непосредственно во время выполнения
Anonymous
(я так думаю)
Alexander
извиняюсь что из перевода, но все же
Oleg
Oleg
нет неявной проверки типов