Alexander
без изменения API
Alexander
по семверу я кстати не должен менять мажорную версию :P
Cheese
согласен, SemVer для разработчиков, PVP для маркетинга
Alexander
fuf
Alexander
ага
Alexander
0->1 не для маркетинга?
Cheese
по семверу я кстати не должен менять мажорную версию :P
сломал семантику => сломал совместимость => должен менять мажор
Alexander
в PVP у меня есть возможность указывать зависимости по второй версии
Cheese
0->1 не для маркетинга?
нет, для разработчиков. 0 значит, что тебе никто не должен, 1 значит договор
Alexander
например для каких-нить либ где я завишу не сильно
Cheese
пусть программа сломается, но не сильно
Alexander
в PVP есть все плюсы семвера, без его идиотизма
Alexander
кастую сюда нелюбителей upper bounds
Cheese
пусть пользователь умрёт, если не до конца
Alexander
которым семвер портит жизнь окончательно и безповоротно
Alexander
а ПВП позволяет работать на свой страх и риск
Alexander
semver абсолютно бесполезный, с ним ничего нельзя сделать хорошо
Alexander
блин у меня какая-то плохая методичка для фанатиков
Alexander
(не относится к нашему сообществу) вообще кстати интересно среди любителей stackage/stack workflow, нелюбителей upper bounds, и любителей semver огромная корреляция
Alexander
учитывая, что по хорошему эти вещи друг другу противоречат
Alexander
т.е. хочешь чтобы семвер толк приносил - ставь аппер баунды
Alexander
ставишь аппербаунды - ломаешь жизнь стекенджу
Кабачок
Лучше бы роботы ставили версии
Quet
@qnikst https://youtu.be/oyLBGkS5ICk?t=29m52s ) вот там про семвер хорошо
Danila Matveev
ставишь аппербаунды - ломаешь жизнь стекенджу
т.е. плохой он в определенном контексте но может же контекст сам оказаться не прав?
Alexander
@qnikst https://youtu.be/oyLBGkS5ICk?t=29m52s ) вот там про семвер хорошо
я вижу там хикки и даже не хочу открывать ссылку, я неправильно делаю?
М
есть список tupl'ов, каждый из трех элементов. как добавить в каждый tuple четвертый элемент, равный сумме длин всех предыдущих третьих элементов?
М
то есть есть что-то такое:
М
("INIT","","") ("JUMP","foo","56") ("JUMPDEST","bar","5b") ("PUSH","0x99","6099") ("PUSH","0x88","6088") ("MUL","","02") ("PUSH","0x6677","616677") ("SSTORE","","55") ("JUMPDEST","foo","5b") ("PUSH","0x88","6088") ("SLOAD","","54") ("JUMPI","bar","57") ("STOP","","00")
М
Нужно к каждой строчке добавить смещение
М
императивный способ был бы такой - пройти все циклом, добавляя длину третьего элемента в переменную и записывая в 4-й элемент
Зигохистоморфный
Сделай структуру с 4 элементами и в четвертой пусть будет Maybe тогда если ничего нет там будет Nothing, иначе Just value
М
что я делаю сейчас, но явно неверно
М
computeOffsets :: [(String,String,String)] -> [(String,String,String,String)] computeOffsets asm = let l = "ss" in map (\(x,y,z) -> (x,y,z,l)) asm
М
ну то есть я могу так посчитать length z, вместо "ss"
М
но нужна длина еще и всех предыдущих
М
Maybe мне тут не знаю зачем, это всё строки, и длина тоже будет храниться в хексе
Dmitry
в чём проблема-то? обходишь первый список, считаешь смещение, генерируешь второй. можно явной рекурсией. можно фолдом.
Dmitry
можно генерить врайтером
Dmitry
может быть, код более простой получится
М
да, наверное фолдл
Dmitry
обычно, (String,String,String) никто не использует, а создают ADT
Dmitry
для которого потом делают pretty printer, что бы его выводить
М
можно и list
М
там все строки
A64m
но нужна длина еще и всех предыдущих
в смысле, вопрос в том, как посчитать длину всех строк в тупле без дублирования? Prelude Control.Lens> ("foo", "bar", "baz") ^. each & length 9
М
не
М
третьих элементов туплей, предшествующих текущему
М
сумму
A64m
сумму
> scanl (+) 0 . map (\(_,_,xs) -> length xs) $ [(1,1,"1"),(2,2,"22"),(3,3,"333")] [0,1,3,6]
Alexander
так а какой там пакет из validation считается хорошим?
Leonid 🦇
@qnikst если любишь линзы то http://hackage.haskell.org/package/validation-0.6.2/docs/Data-Validation.html
Leonid 🦇
или этот. https://hackage.haskell.org/package/either-5/docs/Data-Either-Validation.html тут разве что нет изо линз Valdation<->Either
Leonid 🦇
а нет, есть
Leonid 🦇
Да, в првом есть тайпкласс чтобы валидашки были полиморфные по Validation/Either. я поэтому его взял
Alexander
ясно
Alexander
о either в зависимостях есть уже
Alexander
почему там Monoid а не Semigroup
Alexander
@lonokhov ?
Leonid 🦇
в каком месте?
Leonid 🦇
applicative с semigroup
Leonid 🦇
Alternative только с monoid, но это естественно. Так есть Alt - оно без empty
Leonid 🦇
и соответсвенно semigroup
Alexander
документации
Alexander
data Validation e a Source# Validation is Either with a Left that is a Monoid
Leonid 🦇
Ну может раньше был monoid
Alexander
да, может документацию не обновили
Alexander
так страшно?
извините, я не понял комментария
Влод
ну это существенно определяет выбор либы
Влод
то что моноид вместо полугруппы
Alexander
да
Alexander
если ошибка не формирует Monoid то одной из либ может быть пользоваться нельзя
Alexander
Semigroup e => Semigroup (Validation e a) а как это работает без ограничения на a?
Alexander
@vlastachu вот я посмотрел на типы и инстансы и увидел что они не нравятся могу посмотреть код и проверить instance Semigroup e => Semigroup (Validation e a) where Failure e1 <> Failure e2 = Failure (e1 <> e2) Failure _ <> Success a2 = Success a2 Success a1 <> Failure _ = Success a1 Success a1 <> Success _ = Success a1
Alexander
смотрю - вижу, т.к. у них нету Monoid a то они один из выборов семантику
Alexander
в данном случае из ответов выбирается первый, это далеко не факт, что я хочу, так же может быть последний или все, например
Alexander
в моей программе мне пофиг, но вообще мне это не нравится
Leonid 🦇
зачем вообще этот инстанс?
Leonid 🦇
по большому счёту это на alt можно же сделать