Size: a a a

2020 November 23

к

кана in Haskell
и тут нужно делать рефы (как иорефы, так и просто хранить поинтеры/ключи на мапку с памятью)
источник

к

кана in Haskell
кана
ну вот выше был кейс, лямбда может в замыкание забрать переменную, и между созданием лямбды и вызовом лямбды значение в переменной может поменяться
то есть условно

x := 0
y := \() -> print x
x := 1
y () -- должно вывести 1
источник

к

кана in Haskell
без явных боксов
источник

R

Roman in Haskell
кана
ну вот выше был кейс, лямбда может в замыкание забрать переменную, и между созданием лямбды и вызовом лямбды значение в переменной может поменяться
Ну скоуп-то не меняется все равно. То есть в таком случае ридер + что-то мутабельное внутри

Дизайнить что-то такое, у чего скоуп меняется непредсказуемым образом, мне слава богу не приходилось
источник

к

кана in Haskell
Roman
Скоупы чего угодно. Ридер. Плюс КонтТ/КоденситиТ поверх (локально) , если поведение стейта таки нужно
так, а чем это лучше, и можешь показать пример/дать ссылку что почитать
источник

к

кана in Haskell
стейт выглядит проще и естественнее, а конты тут вообще не понятно как должны использоваться
источник

к

кана in Haskell
do
 declare "a" 1
 set "a" 2
 local do
   declare "a" 0
   set "a" 1
 print =<< deref "a"

-- 2

вот такой язычек, как тут скоупы моделировать не стейтом?
источник

R

Roman in Haskell
кана
так, а чем это лучше, и можешь показать пример/дать ссылку что почитать
тем что

1) local, предоставленный по дефолту, ведет себя ровно так как нужно. Точно не выстрелишь себе в ногу, случайно апдейтнув стейт и забыл отменить апдейт по выходу их скоупа (видел такое кучу раз). И коллега твой тоже не выстрелит, даже если не знает про всю эту специфику
2) при этом если ты таки хочешь иметь поведение стейта, то просто навешиваешь ContT поверх, и Reader превращается в State

таким образом у тебя по дефолту безопасное поведение, которое можно явно локально поменять, если это когда-то нужно
источник

R

Roman in Haskell
ща поищу ссылку про ContT/Codensity в этом контексте
источник

R

Roman in Haskell
According to the facts above, we should have that Codensity (s ->) (excuse the sectioning) is the same as state, and if we look, we see:

forall r. (a -> s -> r) -> s -> r

which is the continuation passing, or Church (or Boehm-Berarducci) encoding of the monad.
источник

к

кана in Haskell
хм, я понял мысль, но я гарантировал невыстрел тем, что делал весь стек языка в ньютайпе, и крайне ограничивал работу со скоупом, то есть кроме withLocal ничего и не было

и таким образом если не править код языка, никак в ногу не выстрелить
источник

R

Roman in Haskell
источник

к

кана in Haskell
спасибо
источник

R

Roman in Haskell
кана
хм, я понял мысль, но я гарантировал невыстрел тем, что делал весь стек языка в ньютайпе, и крайне ограничивал работу со скоупом, то есть кроме withLocal ничего и не было

и таким образом если не править код языка, никак в ногу не выстрелить
это решает проблему 1, но не проблему 2. С ридером + коденсити у тебя в типах видно, каким образом скоуп обрабатывается, и ты можешь менять это поведение посредством явного заворачивания/разворачивания в/из коденсити, так что в коде всегда понятно, где какое поведение используется
источник

Y

Yuuri in Haskell
A64m AL256m qn I0
действительно, не могу представить на каком языке было бы хуже писать после хаскеля чем на питоне. разве что на плюсах, да и то не уверен
На MUMPS
источник

LW

Lev Walkin in Haskell
Yuuri
На MUMPS
Ну и откопал...
источник

R

Roman in Haskell
Roman
это решает проблему 1, но не проблему 2. С ридером + коденсити у тебя в типах видно, каким образом скоуп обрабатывается, и ты можешь менять это поведение посредством явного заворачивания/разворачивания в/из коденсити, так что в коде всегда понятно, где какое поведение используется
источник

R

Roman in Haskell
все эти ContT выглядят страшно, но паттерн там простой, если к нему привыкнуть
источник

к

кана in Haskell
понял идею, мы всегда работаем не с конкретной переменной, а с той, что нам выдали, и таким образом можем контроллировать то что выдавать в скоуп
источник

MK

Maxim Koltsov in Haskell
Поразительно, вообще ни слова не понятно
источник