Alexander
IO вообще тупо тип, говорящий что есть эффект IO. Не больше не меньше.
Alexander
У него есть свойчтва он функтор, что позволяет поднимать в него чистые функции
Alexander
Аппликативный функтор, что позволяет последовательно делать независимые действия, или применять чистую функцию к результатам независимых действий
Алдар
до это тип, но это не означает что в любой функции которая имеет IO реально происходит ввод вывод
Алдар
просто означает что может быть ввод вывод
Алдар
как эффект монадического связывания
Vladislav
ok, в свежем GHC IO определен через ST от RealWorld
Ilya
😁
Alexander
И monad, который позволяет связать результат одного действия с другим действием
Alexander
Т.е. monad это удобный API для работы
Alexander
Есть подход явного тегирования функций эффектами
Alexander
Но это работает в строгих ЯП только
Alexander
Есть в каких-то лиспах
Alexander
Можно как в старые добрые времена сделать что-то похожее на интерпретатор по типу Free
Алдар
аппликатив это тоже из теории категорий?
Alexander
Вроде да, я не знаю ТК
Alexander
Ilya в общем-то вон аж 3 подхода
Alexander
3.5
Алдар
я немного прочитал, в общем это такая нехилая математическая теория
Алдар
абстрактная теория
Alexander
С applicative вообще интересно их полезность совсем недавно поняли
Алдар
которую можно использовать много где, начиная от квантовой физики и заканчивая топологией
Алдар
ну и в хаскелле само собой
Алдар
там вводится понятие категории, объект, морфизм, функтор, моноид - это всё оттуда
Алдар
в хаскелле объекты для категорий - типи, морфизмы - функции
Алдар
функтор и есть функтор
Alexander
При том что есть специальные вещи которые уже именно встроены типа magicDict и побочных вещей, которые работают только на уровне core или вообще хаки в typechecker
Алдар
в общем замудрили нехило, но в принципе чтобы прогать на хаскелле не обязательно в это лезть
Alexander
Да
Vladislav
интересно, как в других компиляторах сделано
Alexander
Эм?
Алдар
как понять хаскель перестаёт быть чистым?)
Alexander
С чего это вдруг перестает?
Алдар
хаскель это практически чистое типизированное лямбда исчисление
Alexander
Вообще всякие unsafePerformIO/unsafeInlineIO /unsafeCoerce# ломают чистоту
Alexander
Но в общем-то это единственное, что ломает, да используется редко и не собирается с -XSafe если кого-то это сильно беспокоит
Vladislav
Alexander
Но они нужны
Alexander
И ничего с этим не сделаешь
Alexander
Очень редко, но нужны
Vladislav
есть кстати примеры, когда без них нельзя? если не считать либу компилятора
Alexander
Со всякими gadts иногда ума компилятора не хватает на правильный reasoning и приходится его через unsafeCoerce убеждать, крайне редко
Alexander
Иногда нужны глобальные мутабельные/ или присваивающиеся из окружения переменные (крайне редко) тогда unsafeCoerce
Alexander
unsafePerformIO
Алдар
аппликатив насколько я понял нужен чтобы поднять функцию от нескольких переменных внутрь контейнера?
Алдар
внутрь нескольких контейнеров
Alexander
f (a -> b)<*> f a -> f b
Алдар
функтор может это сделать для функции одной переменной
Алдар
(a->b)<$> f a->f b
Алдар
а вот если у меня есть функция a->b->c
Алдар
и два контейнера f a, f b
Алдар
а мне надо f c
Alexander
<$> это fmap
Алдар
да, это функтор
Alexander
Аппликативный функтор приьаскивают <*>
Alexander
А так да, частное применение такое
Алдар
(a->b->c) <$> f a -> f (b-> c)
Алдар
f (b->c) <*> f b -> f c
Алдар
(a->b->c) <$> f a <*> f b -> f c
Vladislav
Vladislav
strong lax monoidal functor
Алдар
моноидальный функтор это как? Функтор это штука которая переводит одну категорию в другую
Vladislav
На Википедии забанили https://en.wikipedia.org/wiki/Monoidal_functor
Vladislav
А вообще в оригинальном пейпере про аппликативы написано, почему так.
Алдар
щас покурю
Anonymous
на википедии все просто написано и доступным языком
Алдар
Куда проще и доступнее чем академично через кванторы?
Алдар
только вкуривать долго приходится
SimpleX
Alexander
FFI можно как safe импортнуть
Alexander
А вот всякие alloca вокруг и т.п. уже нет
Anonymous
Anonymous
линтеру не нравится
kalloc
вовза?
Anonymous
а с кем меня еще можно спутать?
Anonymous
и на что это влияет?
kalloc
да хз