Leonid 🦇
MVar (IORef a) - вот так же норм для случая когда мне нужно ждать пока значение на поступит, ну а потом оно будет только обновлятся но никогда не исчезнет?
Leonid 🦇
и второй вопрос: что шустрее - readTVarIO или readIORef
Юрий
Пасиб.
Alexander
at это что?
unix утилита
Kirill
и второй вопрос: что шустрее - readTVarIO или readIORef
Стм какой - то минимальный оверхэд добавит же?
Leonid 🦇
а там у readTVarIO особенный случай
Leonid 🦇
вообще без контеншена я думаю без разницы. IORef тоже спинлок не схватит
Kirill
https://codeburst.io/the-haskell-concurrency-primitive-shootout-538c21993f1c есть, но не совсем прям свежак :)
Kirill
так-что TVar даж и быстрей судя по этим бенчам
Kirill
страннота
Kirill
правда там бенч на модификацию, так что другой юзкейс :-\
Alexander
а как бы hasql с логгером подружить?
кана
Пасиб.
чтобы закончить пример с expr: data E = I Int | B Bool | Sum E E | And E E -- we can (And (I 1) (I 2)) -- not typesafe eval :: E -> ??? -- we can add phantoms and smart constructors data E a -- private (do not export) constructors = I Int | B Bool | Sum (E Int) (E Int) | And (E Bool) (E Bool) i :: Int -> E Int b :: Bool -> E Bool sum :: E Int -> E Int -> E Int and :: E Bool -> E Bool -> E Bool i = I; b = B; sum = Sum; and = And eval :: E a -> a eval (I x) = x -- ?? type of `x` is not `a` -- it is Int то есть одну проблему мы решили, а вторую (приведение Int к a) нет, гадты решают и это введением коершинов, пруфы о равенстве типов (в данном случае a ~ Int), которые поставляются в конструкторах, и их применении к значению
Юрий
Во, ясно.
Юрий
Данке.
Leonid 🦇
@qnikst в общем благодаря тебе я везде в монадках теперь в использую fix вместо явной рекурсии
Alexander
\o/
Alexander
от неожиданных утечек и введения бесполезных имен
IC
бесполезные имена это всякие go?
Alexander
да
Alexander
вместо `let go = ... in go
Alexander
+ помогает от утечек при вложенных циклах
IC
"go не нужен" — @haskellru
кана
не очень красиво получается, когда нужно аргумент в fix-функцию передать
Aliester
хаскель не нужен -Роб Пайк
Alexander
ну это ж haskell тут 100500 способов и плюсов и минусов у каждого
IC
осталось теперь упороться и сделать data ExprF a where и обмазаться тайплевел фиксами
Alexander
fix это такой safe default
Leonid 🦇
fetchLoop manager req = flip fix 0 $ \next errCount -> do r <- fetchOnce manager req errCount case r of Nothing -> next (succ errCount) Just keys -> pure keys
Alexander
ката и анаморфизмами
Theta
вместо `let go = ... in go
Да, с fix определённо лучше! fix (\go n -> if n <= 1 then 1 else n * go (n-1)) 5
Alexander
если кому интересно отмотайте на несколько недель назад, там длинная дискуссия была
Alexander
в этом
Alexander
с @JelF1337 диалог был
Alexander
если я не ошибаюсь
Alexander
было дело
кана
fetchLoop manager req = flip fix 0 $ \next errCount -> do r <- fetchOnce manager req errCount case r of Nothing -> next (succ errCount) Just keys -> pure keys
FLIP! вот оно, это то что я выше писал про проблему передачи аргумента чет я про flip не подумал
Alexander
вообще как мне передали мысль сноймана если тебе приходится объяснять что-то более, чем 2 раза то пиши об этом пост
Alexander
видимо надо писать об этом пост.
Alexander
но это сложно и долго :/
Alexander
соблюдайте предельную осторожность. Первый симптом fix, потом flip, дальше (.) . (.) и понеслась
Leonid 🦇
но это сложно и долго :/
пусть @JelF1337 пишет об этом пост!
Alexander
я кстати могу
Alexander
мнение человека может не совпадать со мнением редакции
Alexander
но вообще круто бы
Anatolii
Alexander
ну это ще вроде норм
Alexander
вот если функция point-free, а большая часть операций там это флипы и композиции, то пациента пора лечить
Сергей
https://hackage.haskell.org/package/universum-1.0.4/docs/Universum-VarArg.html потом вот это
это ... - кстати, круто. Сколько раз были ситуации когда добавляешь второй параметр в функцию, и приходится все цепочки композиций с этой функцией переписывать на явные параметры. А тут получается, можно просто добавить к точке ещё две - и они соберутся сами.
Alexander
было у олега
Leonid 🦇
сколько нужно памяти на компиляцию?
Dmitry
А как fix помогает от утечек?
Anatolii
мне тоже нравится
Anatolii
но когда я это исопльзую ощущение что я переусложняю
Dmitry
@qnikst А как fix помогает от утечек?
Vladislav
Сначала придумают карриррвание, а потом проблемы с ним решают
Anatolii
опять типы не налезли
Alexander
@qnikst А как fix помогает от утечек?
создает дополнительный уровень индирекции
Alexander
в итоге у тебя во внутреннем цикле не хранится ссылка на разворачиваемую функцию, а на обертку fix
Alexander
у Ромы был пост про двойной цикл
Alexander
с выводом AAAA ужас
Alexander
а использовал бы fix - сразу все хорошо
Anatolii
я раньше использование фикс видел только в докладе у spj
Anatolii
там он предложил в ghci ввести fix error
Anatolii
а за последнеюю неделю уже 2 послезных кейса увидел
Alexander
я постоянно вижу полезные кейсы, потом смотрю результат и переписываю на let :(
Aliester
Dmitry
у Ромы был пост про двойной цикл
Это: https://ro-che.info/articles/2017-01-10-nested-loop-space-leak ?
Alexander
+
Alexander
worker написанный с fix просто работает
Evgeny
/home/basov/ldap syslog1.mon.m
Evgeny
бери и удаляй
Evgeny
я попробовал положить поле в userPKSC или как там его