Alexander
тем более что в достаточно сложных чтобы нужна была рекурсия случаях она достаточно сложна чтобы взорвать мозг
A64m
убрали в 8 версии, но убирание чего-то никто включать особо не хочет
Зигохистоморфный
ну да, можно включить прагму Strict
Vladislav
@A64m_qb0 dependent core делает Ningning Xie
A64m
точно
Alexander
ну и через fix будет сложнее выразить то что легко выражается через unfold по идее
Зигохистоморфный
Alexander
Alexander
ну то есть с точностью до пары редукций тот же комбинатор
Зигохистоморфный
стрикт y комбинатор не выразим
Зигохистоморфный
выразим только так
newtype Rec a = In { out :: Rec a -> a }
y f = (\x -> f (out x x)) (In (\x -> f (out x x)))
Зигохистоморфный
но
Зигохистоморфный
этот Rec есть type Rec a = Fix (Flip (->) a)
Зигохистоморфный
что есть fix на уровне типов
Alexander
странно
Alexander
но пофиг
Зигохистоморфный
но пофиг
нет не пофиг, поясни свою позицию, что у тебя вырзимо
Alexander
ну я помню что эксперементировал с этим
Alexander
и помню что получилось
Alexander
но воспроизвести эксперимент ен смог
Alexander
скорее всего я взял версию для не-ленивых языков изначально
Зигохистоморфный
она тоже не пройдет
Alexander
ну значит какую то еще
Зигохистоморфный
ну разве что через дичь unsafeCoerce
Oleg
Если бы в типизированной лямбде типизировался Y, возможно, никаких хаскелей и не было бы
Alexander
понимаешь, проблема в том что я даже не могу вспомнить в чем была ошибка
Alexander
так что пофигу
Зигохистоморфный
скорее всего так
y = \f -> (\x -> f (unsafeCoerce x x)) (\x -> f (unsafeCoerce x x))
Зигохистоморфный
но так все тогда будет сходиться
Alexander
я про unsafeCoerce сравнительно недавно узнал
Alexander
маловероятно
Зигохистоморфный
и также попробуем реализовать функцию точка и доллар
канал прям жжет
Cheese
школьники пишут книги по Хаскелю. это прекрасно
Dmitrii
и можно много уровней одного типа иметь
Только реальность показывается, что много уровней — плохо для перформанса. Лучше иметь один ReaderT с тройкой, чем три ридера каждый для отдельного поля
Alexander
с ReaderT и tf интерфейсом с последними трансформерами нормально
Alexander
тогда уже догадались inline прагмы расставить
Alexander
один ридер - он надёжнее, конечно
Зигохистоморфный
более линейная конструкция была бы с extensible effects
но пока нет нормального преформанса на открытом множетсве типов
нужен более правильный variant
Зигохистоморфный
а человек то могет!
C | Golang | Python | Haskell programmer. Cryptography and Programming is just a hobby.
Ю ли я? 🤔
| - это "или"?
IC
Побитовое
Anonymous
@lalabuy будет жить. Поприветствуем!
Alexander
Ю ли я? 🤔
Умеет ли GHC-шный оптимизатор делать апдейт структуры мутабельным, если определит, что предыдущее значение больше нигде не используется?
Alexander
нет
Alexander
ну и увидеть что нигде не используется можно в очень низком числе случаев
Alexander
а там можно надеяться что структура не упакована вообще будет
Alexander
по для локальных можно структуры вообще не делать
A64m
Alexander
вот я тоже самое и сказал (вроде)
Anonymous
@corrado_serge будет жить. Поприветствуем!
Misha
Господа, а есть какой-нибудь хороший и систематичный способ побенчмаркать память? criterion для скорости, а есть что-то для allocations/gc?
Dmitry
На коленке есть :set -s
Dmitry
Ещё есть библиотека weigh
Dmitry
А вот если у меня есть vs :: TVar (Set a), то как лучше всего подождать, когда в этой переменной vs появится какое-то значение? И тут же получить его. Сейчас на слипах делаю:
s <- fix $ \loop -> atomically $ readTVar vs >>= (\s -> if Set.null s then (threadDelay 1e5 >> loop) else s)
Но это ж не очень правильно, вроде как?
Misha
A64m
Dmitry
Misha
а конкретнее, в чем задача состоит?
Глобально задача выглядит так. Я замыслил и потихоньку ковыряю вот такую штуку https://github.com/lolepezy/stm-ixset типа IxSet, но для конкурентного случая (по аналогии с stm-containers). Сейчас меряю, действительно ли есть профит в сравнении с TVar IxSet (вроде есть, раза в 2-3 быстрее при большом числе конкурентных модификаций, хотя надо дальше смотреть). Но хочу еще выбрать реализацию, чтобы памяти ела поменьше при прочих равных.
Daniil
Есть норм тутлриалы ен/ру по созданию приложений под мак на хаскеле?
Daniil
Желательно не через динамическую библиотеку
Misha
Daniil
Dmitry
Хаскельных мануалов не нашёл, когда надо было, навелосипедил по общечеловеческому
Dmitry
С копированием всех dylib внутрь app
Dmitry
Гуй на sdl
Daniil
Daniil
Alexander
Alexander
если позволяет скорость то читаешь и делаешь check . Map.elem x =<< readTVar
Alexander
минус, что оно будиться на каждую запись будет
Alexander
если не подходит, то нужно уже не давать прямой доступ к структуре
Dmitry
Да, спасибо!