Alexander
превращать а object добавлять поля на уровне object
A64m
опять типы не натянулись
A64m
ну и появился диф вырезающий DPH, вот это убирание экстеншона так убирание. хотя им никто никогда не пользовался, но ради (и первоначально в рамках) этого десятилетнего долгостроя хаскель стал из переэмеля недоомегой, например.
A64m
не вмерджили еще
A64m
может, кстати, и не вмерджат. этот несчастный DPH уже пару раз приговаривали, но так и не удушили
A64m
сейчас опять мейнленд выскочит откуда-нибудь и в очередной раз пообещает его гальванизировать
Leonid 🦇
> vectorise: Put it out of its misery
Denis
натяну типы на задачу, дорого
Anatolii
это ж поидее любой Generic можно сделать Value
Anatolii
тогда я могу сделать что хочу
A64m
с Value-то конечно
A64m
но я не знаю какие рекорды в какие надо преобразовывать, может это несложно сделать даже и без дженериков
A64m
тогда все нормально типизировано будет
Timofey
натяну типы на задачу, дорого
А задача похожа на глобус?
Cheese
вот так сработало time :: Lens' _ Time time = _3
совсем забыл про анонимные структурки
A64m
можно просто несколько параметров в рекорд объединить, для рекордов полно всяких фич, которые облегчают такое использование
Cheese
а какие безымянные рекорды принято носить с линзами в это врямя суток?
A64m
не знаю, нормальных среди них нету даже по меркам таких штук
A64m
так что все равно, наверное
A64m
самые используемые - винил
Зигохистоморфный
есть еще https://github.com/target/row-types
A64m
самые удобные, по моему, из всех пруф оф концептов так и не были доделаны и уже сгнили
Cheese
вроде bookkeeper и rawr были на слуху недавно
Зигохистоморфный
ну и superrecord
A64m
ну есть форк пикеринга на гитхабе, но на хекедже его нет
A64m
суперрекорд не сортирует
A64m
есть еще https://github.com/target/row-types
а это вообще хешмапы вроде
Зигохистоморфный
а это вообще хешмапы вроде
не, вроде рекорды и еще есть data-diverse
A64m
рекорды, но имплементированы как хешмапы
A64m
буккипер современные рекорды (с сортировкой), но мне они в свое время не понравились, правда вроде библиотека живая
A64m
и там есть хорошая фича конвертации из обычного рекорда
Denis
суперрекорд не сортирует
сортирует, поэтому компилирует до нового года
A64m
да они все такие
A64m
ну в rawr был просто максисмум в 8 элементов
A64m
до 10 элементов они обычно быстрые
A64m
ну и у некоторых либ типа винила или суперрекорда поддержка линз не по умолчанию, т.е. там они все будут r ^. пожалуйстаСделайЛинзу foo
Cheese
получилось нормально с Буккипером, без пожалуйстаСделайЛинзу
Cheese
код местами стал понятнее
Cheese
сообщения об ошибках стали сумасшедшими
Cheese
• Occurs check: cannot construct the infinite type: old0 ~ type-level-sets-0.8.7.0:Data.Type.Map.Nub ((type-level-sets-0.8.7.0:Data.Type.Set.Sort (type-level-sets-0.8.7.0:Data.Type.Set.Filter 'type-level-sets-0.8.7.0:Data.Type.Set.FMin ("jobs" 'type-level-sets-0.8.7.0:Data.Type.Map.:-> t0 (t1 Work)) (type-level-sets-0.8.7.0:Data.Type.Map.Nub (type-level-sets-0.8.7.0:Data.Type.Set.Sort (old0 type-level-sets-0.8.7.0:Data.Type.Map.:\ "jobs")))) ...
Misha
что-то туплю: type Key k = (Eq k, Ord k) get :: (Index.Key ix, Lookup ixs ix) => IxSet ixs v -> ix -> STM [v] get set ik = let idx = getIdx set ik in return [] getIdx :: (Key ix, Key i, Lookup ixs ix) => IxSet ixs v -> i -> Idx v ix getIdx (Empty _) _ = Hole getIdx (IdxSet _ indexes) ik = Lookup Proxy (Proxy :: Proxy ik) indexes говорит Could not deduce (Eq ix0, Ord ix0) arising from a use of ‘getIdx’ from the context: (Index.Key ix, Lookup ixs ix) bound by the type signature for: get :: (Index.Key ix, Lookup ixs ix) => IxSet ixs v -> ix -> STM [v]
Misha
почему getIdx натягивается, а get - нет?
Cheese
Proxy ik?
Cheese
откуда ik?
Cheese
getIdx (IdxSet _ indexes) ik = Lookup Proxy (Proxy :: Proxy ik) indexes — здесь значение ik не используется, а тип ik не вводится (да, это разные вещи)
Misha
упс, да
Misha
спасибо
Cheese
заработало?
Cheese
код местами стал понятнее
главное — не пришлось писать тип даже локально. начального значения структурки хватило
Cheese
единственное, что не очень красиво с bookkeeper — приходится писать emptyBook. у Rawr было красивее
A64m
но там цена такой красивости в исплементации, конечно, адовая
A64m
не удивительно, что ее забросили
Misha
заработало?
да, тайпчекается
Leonid 🦇
@catamorphism подсел я на ваш стиль индентации аннотаций. Красиво. handleGetAssetPaths :: TxMonad m n => DataStore n => KatipContext m => HandleT Api.GetAssetPaths m
A64m
да
A64m
там раз не рекурсивные рекорды - для каждого размера имплементации всех клссов, семейств и т.д.
A64m
в буккипере же вся имплементация вообще из другой библиотеки
A64m
@catamorphism подсел я на ваш стиль индентации аннотаций. Красиво. handleGetAssetPaths :: TxMonad m n => DataStore n => KatipContext m => HandleT Api.GetAssetPaths m
когда в 2005-ом году рекламировали ФП, то говорили что типы писать не надо, код выглядит как скриптовый. обманывали, конечно.
Leonid 🦇
Ну, типы проще и важнее документации
A64m
ну да, но это никак не противоречит неписанию типов
Ю ли я? 🤔
@catamorphism подсел я на ваш стиль индентации аннотаций. Красиво. handleGetAssetPaths :: TxMonad m n => DataStore n => KatipContext m => HandleT Api.GetAssetPaths m
Красиво, но расстраивает, что с => начинаются как констрейнты, так и первый аргумент <_<
A64m
проблема-то в том, что типы не прочитаешь пока сам их не впишешь куда надо, ведь тулинг отстойный
Leonid 🦇
A64m
топлевельной
Leonid 🦇
для всего остального аннотации редко нужны
Leonid 🦇
если конечно у вас не линзо-шайтан
A64m
но с позиций "типы - лучшая документация" аннотации типов могут быть ценны много где. причем что самое плохое - для разных читателей в разных местах
A64m
а где не линзо-шайтан и без типов все понятно
A64m
короче как обычно, там где надо - как раз и не будет
Leonid 🦇
ну если у вас where на экран то конечно
A64m
а зиллион тривиальных сигнатур заставит Wall проставить
Denis
Красиво, но расстраивает, что с => начинаются как констрейнты, так и первый аргумент <_<
я на самом деле констрейнты в скобочки беру, если их много и внутри скобочек тоже сдвигаю
Leonid 🦇
а меня не обламывает =>