Leonid 🦇
MVar (IORef a) - вот так же норм для случая когда мне нужно ждать пока значение на поступит, ну а потом оно будет только обновлятся но никогда не исчезнет?
Leonid 🦇
и второй вопрос: что шустрее - readTVarIO или readIORef
Theta
Юрий
Пасиб.
Alexander
Kirill
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/
IC
Alexander
от неожиданных утечек и введения бесполезных имен
IC
бесполезные имена это всякие go?
Alexander
да
Alexander
вместо `let go = ... in go
Alexander
+ помогает от утечек при вложенных циклах
IC
"go не нужен"
— @haskellru
кана
не очень красиво получается, когда нужно аргумент в fix-функцию передать
Anatolii
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
ката и анаморфизмами
IC
Alexander
если кому интересно отмотайте на несколько недель назад, там длинная дискуссия была
Leonid 🦇
Alexander
в этом
Alexander
с @JelF1337 диалог был
Alexander
если я не ошибаюсь
Alexander
было дело
кана
Alexander
вообще как мне передали мысль сноймана если тебе приходится объяснять что-то более, чем 2 раза то пиши об этом пост
Alexander
видимо надо писать об этом пост.
Alexander
но это сложно и долго :/
Alexander
соблюдайте предельную осторожность. Первый симптом fix, потом flip, дальше (.) . (.) и понеслась
Alexander
я кстати могу
Alexander
мнение человека может не совпадать со мнением редакции
Alexander
но вообще круто бы
Anatolii
Alexander
ну это ще вроде норм
Alexander
вот если функция point-free, а большая часть операций там это флипы и композиции, то пациента пора лечить
Alexander
было у олега
Leonid 🦇
сколько нужно памяти на компиляцию?
Dmitry
А как fix помогает от утечек?
Anatolii
мне тоже нравится
Anatolii
но когда я это исопльзую ощущение что я переусложняю
Dmitry
@qnikst А как fix помогает от утечек?
Vladislav
Vladislav
Сначала придумают карриррвание, а потом проблемы с ним решают
Anatolii
опять типы не налезли
Alexander
в итоге у тебя во внутреннем цикле не хранится ссылка на разворачиваемую функцию, а на обертку fix
Alexander
у Ромы был пост про двойной цикл
Alexander
с выводом AAAA ужас
Alexander
а использовал бы fix - сразу все хорошо
Anatolii
я раньше использование фикс видел только в докладе у spj
Anatolii
там он предложил в ghci ввести fix error
Anatolii
а за последнеюю неделю уже 2 послезных кейса увидел
Alexander
я постоянно вижу полезные кейсы, потом смотрю результат и переписываю на let :(
Aliester
Alexander
+
Alexander
worker написанный с fix просто работает
кана
Evgeny
/home/basov/ldap
syslog1.mon.m
Evgeny
бери и удаляй
Evgeny
я попробовал положить поле в userPKSC или как там его