Size: a a a

2020 May 15

AV

Alexander Vershilov in fprog_spb
меняешь atomic - пиши io!
источник

AV

Alexander Vershilov in fprog_spb
(я мог неправильно прочитать документацию, возможно пишущие на clojure меня поправят)
источник

AS

Alex Shipilov in fprog_spb
Alexander Vershilov
меняешь atomic - пиши io!
скорее получается что оборачиваешь функцию в  io! и если гдето в цепочке встречается обращение во внешний мир, бросается исключение, т.е. запустить и выполнить функцию с побочным можно, но грозит тем, что транзакции подвиснут.
https://clojuredocs.org/clojure.core/io!

а что дает использование побочного эффекта в stm, в том плане, что я могу побочный эффект выполнить снаружи, и если все ок, поменять стейт. полагаю это связано с природой самого хаскеля и его работой со стейтом?
источник

YS

Yan Shkurinskiy in fprog_spb
эффекты выражены в типах, типы контроллируются тайпчекером до работы
источник

AS

Alex Shipilov in fprog_spb
т.е. побочные не выполнишь, пока не опишешь тип который придет от них?
источник

AV

Alexander Vershilov in fprog_spb
Alex Shipilov
скорее получается что оборачиваешь функцию в  io! и если гдето в цепочке встречается обращение во внешний мир, бросается исключение, т.е. запустить и выполнить функцию с побочным можно, но грозит тем, что транзакции подвиснут.
https://clojuredocs.org/clojure.core/io!

а что дает использование побочного эффекта в stm, в том плане, что я могу побочный эффект выполнить снаружи, и если все ок, поменять стейт. полагаю это связано с природой самого хаскеля и его работой со стейтом?
Судя по примерам все же моя интерпретация верна
источник

YS

Yan Shkurinskiy in fprog_spb
побочные эффекты не выполнишь, т.к. результат будет иметь тип, который будет явно говорить о том, что там могли быть эффекты
источник

AV

Alexander Vershilov in fprog_spb
Ты пишешь io в своём действии и если его кто-то вставит в транзакцию, то она взорвётся
источник

AV

Alexander Vershilov in fprog_spb
(defn fn-with-io []
        (io! (println "hello")))
источник

AV

Alexander Vershilov in fprog_spb
Если я напишу io! (form-without-io) то оно всё равно взорвуётся в тразакции
источник

AS

Alex Shipilov in fprog_spb
ага, увидел
источник

AV

Alexander Vershilov in fprog_spb
Про хаскель могу объяснить на пальцах, а могу используя слово "монада" =)
источник

AS

Alex Shipilov in fprog_spb
в общем я понял, нужно пощупать хаскель)
источник

AS

Alex Shipilov in fprog_spb
а на пальцах что такое монада?)
источник

AV

Alexander Vershilov in fprog_spb
Интерфейс позволяющий описать передачу данных из одного действия в другое
источник

AV

Alexander Vershilov in fprog_spb
Т.е. есть действия с побочными эффектами, побочный эффект это что-то, что не захватывается твоими типами
источник

AV

Alexander Vershilov in fprog_spb
Не так
источник

AV

Alexander Vershilov in fprog_spb
Типами и входящими значениями
источник

AV

Alexander Vershilov in fprog_spb
Например, у тебя есть функция деления, она принимает 2 числа и возвращает число
источник

AV

Alexander Vershilov in fprog_spb
Но в случае если ей передать вторым аргументом 0, она не может вернуть результат - это эффект
источник