Alexander
а да
Cheese
match внутри как раз берёт смещения и возвращает подстроку. надо его разобрать и оставить только смещения
Alexander
count = Parser $ \s p m f s -> pure p
Alexander
?
Cheese
ага
Denis
count = Parser $ \s p m f s -> pure p
инпут не отмотает вроде, надо не pure p, кажется, а f _ p m _ _
Denis
pure p вроде байт схавает и не вернет
Cheese
count = Parser $ \s p m f s -> pure p
не так-то просто
Cheese
• Couldn't match type ‘r’ with ‘Atto.Pos’ ‘r’ is a rigid type variable bound by a type expected by the context: forall r. Atto.State BS.ByteString -> Atto.Pos -> Atto.More -> Atto.Failure BS.ByteString (Atto.State BS.ByteString) r -> Atto.Success BS.ByteString (Atto.State BS.ByteString) Int r -> Atto.IResult BS.ByteString r at lib/RON/Binary.hs:193:10-47 Expected type: Atto.IResult BS.ByteString r Actual type: Atto.IResult BS.ByteString Atto.Pos • In the expression: pure pos In the second argument of ‘($)’, namely ‘\ _ pos _ _ _ -> pure pos’ In the expression: Atto.Parser $ \ _ pos _ _ _ -> pure pos | 193 | getPos = Atto.Parser $ \_ pos _ _ _ -> pure pos
Denis
там надо f или s звать
Denis
мне по вышеназванным причинам кажется что f, но я не смотрел излишне внимательно!
Cheese
придётся-таки match скопипастить
Cheese
> излишне внимательно
Cheese
я тебе чрезмерно благодарен
Denis
ну там надо инстансы смотреть, происходит ли смещение оффсета в них автоматически
Denis
Если происходит, то f. Если нет - s.
Ю ли я? 🤔
Чё, ребзя, кто в биокад пойдёт завтра на @bravit111?
Там не слишком entry-level по описанию?
Rigidus
я схожу
Cheese
заработало getPos :: Parser Int getPos = Atto.Parser $ \t pos more _ suc -> suc t pos more $ Atto.fromPos pos
Cheese
хотя это тоже не спасёт
Cheese
если сначала парсить, а потом проверять длину, злоумышленник может бесконечный поток скормить
Denis
а задача то какая?
Cheese
парсить свежепридуманный формат/протокол
Vasiliy
я ведь правильно понимаю, что Arbitrary инстансы нужно писать в том же файле, где и целевой тип? мне кажется это странным, мб лучше {-# OPTIONS_GHC -fno-warn-orphans #-} и написать их рядом с Spec.hs где-то?
A64m
не то чтобы нужно, рекомендуется
Denis
если орфанов не хочешь - надо писать там же
Alexander
да, то что выше написали
Alexander
если написать в Spec то не забыть его заэкспозить
Alexander
а то мало ли пользователю либы в тестах нужно будет
A64m
я думаю, что во всякой вспомогательной обвязке для тестирования, отладочной печати и т.д. сирот бояться не нужно
Vasiliy
я мб глупость сейчас скажу, но разве в таком случае (если писать в том же файле) либа не будет ли зависеть от QuickCheck?
A64m
будет
Alexander
будет
Denis
можно взять hedgehog, который вообще инстансов не требует
Vasiliy
а это плохо, что она будет зависеть? (hedgehog интересный, спасибо, не видел, но мне уже лень переходить на что-то еще:))
A64m
бойлерплейт руками писать требует зато
Denis
требует
Alexander
в идеале сделать пакет с либой и отдельный пакет с инстансами для квикчек имхо
Alexander
++
Alexander
к вопросу
Alexander
чтобы не тянуть зависимость в самой либе, но арбитрари инстансы тоже можно было просто подключить
Vasiliy
блин, меня смущает, что тестовые зависимости попадают в либу это ведь влияет на ее размер? (думаю влияет, конечно) нет, мне, конечно, не очень важен ее размер сейчас вообще, но мне кажется это не оч правильным
Alexander
как правило "в идеале" противоречит здравому смыслу, так как мир неидеален
A64m
сделать сироты в тестовом субпакете, только он же будет и от квикчека зависеть
A64m
но эти "бест практисы" не рапространяются на тестирование и интеграцию разных библиотек в приложении
A64m
плохо делать сироты в библиотеках
A64m
естественно тесты на этот библиотечный случай не распростраяются
Denis
в приложении как правило появляется все равно как минимум один модуль с сиротами
Denis
потому что авторы библиотек не следуют best practices описанным выше
Leonid 🦇
в тестах и бинарях можно любую вакханалию устраивать. Если конечно в апстриме не могут инстанс добавить.
A64m
но в приложении они и не опасны (если только не перемудрить с очень уж сложной структурой приложения)
Leonid 🦇
добавление инстанса это мажорный бамп пвп?
Leonid 🦇
можно ньютайп в защитных целях сделать
И еще прошептать "чур-чурашки, пауки-букашки, фиги-таракашки. чур меня чур меня".
A64m
потому что авторы библиотек не следуют best practices описанным выше
чтоб этим бест практисам следовать все библиотеки должны быть зависимы от всех библиотек, чего на практике не сделать, да и не надо
Denis
И еще прошептать "чур-чурашки, пауки-букашки, фиги-таракашки. чур меня чур меня".
coerce . трахтибидох . coerce не так уж страшно сделать, если уж суеверный
Denis
а я кстати не понимаю чего все жалуются
Denis
lens тянет много, но все такое дефолтненькое
A64m
временами lens зависила от не очень дефолтных пакетов вроде аэсона
Leonid 🦇
жсон всюду
Leonid 🦇
так что считай дефолтный
A64m
а что насчет zlib и utf8-string?
Denis
вы еще не пишете бизнес-логику в json?
Denis
zlib спорненько
Leonid 🦇
utf8-string это же bytestring
Denis
а для utf8-строк я сам оптику писал (
Denis
прошляпил чтоли
Leonid 🦇
а еще есть text-short который utf8 но не пиненый
Alexander
вот допилят haskell и можно будет 100600 публичных пакетов в одном держать
Alexander
ой cabal
A64m
да, ghc для этого еще в 7.10 допилили, это кабалисты все тормозят
Denis
хаскел может тоже когда-нибудь допилят
Leonid 🦇
злой кабал