Alexander
превращать а object добавлять поля на уровне object
A64m
опять типы не натянулись
A64m
ну и появился диф вырезающий DPH, вот это убирание экстеншона так убирание. хотя им никто никогда не пользовался, но ради (и первоначально в рамках) этого десятилетнего долгостроя хаскель стал из переэмеля недоомегой, например.
Leonid 🦇
A64m
не вмерджили еще
A64m
может, кстати, и не вмерджат. этот несчастный DPH уже пару раз приговаривали, но так и не удушили
A64m
сейчас опять мейнленд выскочит откуда-нибудь и в очередной раз пообещает его гальванизировать
Leonid 🦇
> vectorise: Put it out of its misery
Denis
натяну типы на задачу, дорого
Anatolii
это ж поидее любой Generic можно сделать Value
Anatolii
тогда я могу сделать что хочу
A64m
с Value-то конечно
A64m
но я не знаю какие рекорды в какие надо преобразовывать, может это несложно сделать даже и без дженериков
A64m
тогда все нормально типизировано будет
Timofey
Cheese
A64m
можно просто несколько параметров в рекорд объединить, для рекордов полно всяких фич, которые облегчают такое использование
Cheese
Cheese
а какие безымянные рекорды принято носить с линзами в это врямя суток?
A64m
не знаю, нормальных среди них нету даже по меркам таких штук
A64m
так что все равно, наверное
A64m
самые используемые - винил
Зигохистоморфный
есть еще https://github.com/target/row-types
A64m
самые удобные, по моему, из всех пруф оф концептов так и не были доделаны и уже сгнили
Cheese
вроде bookkeeper и rawr были на слуху недавно
Зигохистоморфный
ну и superrecord
A64m
A64m
ну есть форк пикеринга на гитхабе, но на хекедже его нет
A64m
суперрекорд не сортирует
A64m
A64m
рекорды, но имплементированы как хешмапы
A64m
буккипер современные рекорды (с сортировкой), но мне они в свое время не понравились, правда вроде библиотека живая
A64m
и там есть хорошая фича конвертации из обычного рекорда
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
Misha
спасибо
Cheese
заработало?
Cheese
единственное, что не очень красиво с bookkeeper — приходится писать emptyBook. у Rawr было красивее
A64m
но там цена такой красивости в исплементации, конечно, адовая
A64m
не удивительно, что ее забросили
Leonid 🦇
@catamorphism подсел я на ваш стиль индентации аннотаций. Красиво.
handleGetAssetPaths
:: TxMonad m n
=> DataStore n
=> KatipContext m
=> HandleT Api.GetAssetPaths m
Denis
Cheese
A64m
да
A64m
там раз не рекурсивные рекорды - для каждого размера имплементации всех клссов, семейств и т.д.
A64m
в буккипере же вся имплементация вообще из другой библиотеки
A64m
Leonid 🦇
Ну, типы проще и важнее документации
A64m
ну да, но это никак не противоречит неписанию типов
Ю ли я? 🤔
A64m
проблема-то в том, что типы не прочитаешь пока сам их не впишешь куда надо, ведь тулинг отстойный
Cheese
Leonid 🦇
A64m
топлевельной
Leonid 🦇
для всего остального аннотации редко нужны
Leonid 🦇
если конечно у вас не линзо-шайтан
A64m
но с позиций "типы - лучшая документация" аннотации типов могут быть ценны много где. причем что самое плохое - для разных читателей в разных местах
A64m
а где не линзо-шайтан и без типов все понятно
A64m
короче как обычно, там где надо - как раз и не будет
Leonid 🦇
ну если у вас where на экран то конечно
A64m
а зиллион тривиальных сигнатур заставит Wall проставить
Denis
Leonid 🦇
а меня не обламывает =>