Alexander
до не включительное было
Кабачок
просто восточноевропейский акцент)
Алексей
Да просто славянский акцент.
Danila Matveev
нубский вопрос
.\Data\Vector\Generic\Mutable.hs:833 (accum): index out of bounds (3,3)
CallStack (from HasCallStack):
error, called at .\Data\Vector\Internal\Check.hs:87:5 in vector-0.12.0.1-CnPH69pDwM4A5esizlXfXi:Data.Vector.Internal.Check
хаскелль не разматывает стектрейс до места вызова? (у меня привычка с jvm что стектрейс ведет к месту происшествия)
Danila Matveev
к месту происшествия в моем коде*
Dmitrii
Welcome to Haskell! 👋
Danila Matveev
а, ок)
Dmitrii
Хорошо ещё, что хотя бы видно, где именно произошла ошибка. А то раньше даже и этого не было...
Мне от этого самому, конечно, очень больно. Было бы удобно с полным стек-трейсом. Но в данный момент этого нет :( Если только вручную не заморочиться не расставить, скажем так, аннотаций к каждой функции.
Alexander
нужно чтобы HasCallStack было во всех функциях
Alexander
ну ещё вариант пересобрать ghc и поддержкой libdw
Alexander
что очень просто если у тебя гента
Alexander
и собирать с -g
Alexander
тогда будут libdw-шный стек
Alexander
даже в gdb видимый
A64m
еще можно с профайлером собрать и запускать с -xc
Alexander
это путь сильных
A64m
и это еще не все способы
Alexander
если не на время отладки
Alexander
а что ещё кстати?
A64m
но нормальных ни одного
Alexander
-xc то известная штука
A64m
еще отладчик в ghci
Alexander
мне libdw нравится но он вроде не работает ещё
Alexander
в HEAD какое-то приближение
Кабачок
принтфы через unsafePerformIO или какой там самый модный способ напечатать и не загадить сигнатуру?
A64m
так если печатать можно сигнатуру Show загадить
A64m
да он неюзабельный практически
Alexander
Debug.Trace
Danila Matveev
у меня и кода кот наплакал, попробую
Alexander
traceM + trace
A64m
а, ну если так то может сгодится
john
а щаз какая часть?
john
а, нуда, вторая
john
в первой меня еще не было
Anton
Немного еще оффтопа: испаноговорящие часто не различают sh/ch, s/z, b/v и долготу английских гласных вдобавок. Что создает интересные недоразумения. Мне, например, трудно различить когда они говорят provability и probability. А ещё забавно слышать “You are cheating” (с сооотвествующей заменой).
Alexandr
Всем привет, разбираюсь с монад трансформерами. Не совсем понимаю, можно-ли написать функтор для StateT, не учитывая, что тупль - бифунктор?
Alexander
туплю не обязательно быть бифункторгм чтобы написать стейтТ
Alexandr
просто не совсем понятно, если:
newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
Мы пишем fmap
instance Functor m => Functor (StateT s m) where
fmap f (StateT smas) = StateT $ \s ->
let mas = smas s ...
Мы знаем, что m - функтор и пара - функтор, но если просто юзать композицию (fmap . fmap), то ничего хорошего не выйдет
Alexandr
с другой стороны, вытащить (a, s) из m нельзя, чтобы сделать что-то вроде
(a, s') <- smas s
return (f a, s')
Vasiliy
для изменения (a, s) внутри mas вполне достаточно того, что m - функтор
Dmitry
какой парсер у нас самые красивые сообщения об ошибках выдаёт - мегапарсек?
Dmitry
ну, в смысле, где легче всего сделать обработку ошибок
Dmitry
аттопарсек надоел, хочется нового красивого. скорость неважна
Alexandr
Trifecta норм ошибки дает
Aleksei (astynax)
У мегапарсека красивые ошибки. У трифекты тоже
Зигохистоморфный
По моему если написать фмап для State, а потом просто добавить do notation то как раз будет StateT
Aleksei (astynax)
Мегапарсек давно уже есть :) Это идейный продолжатель парсека, точнее Megaparsec позиционируется как современная замена оному
Aleksei (astynax)
Продвинутый форк, проще говоря
Крылатый
Ааа
Aleksei (astynax)
Сам Парсек никто не трогает давно уже. И нишу не самых быстрых, но "навороченных" парсеров пытается занять Megaparsec. И Трифекта тоже туда метит
Aleksei (astynax)
Мегапарсек быстрее парсека и сообщения об ошибках генерить умеет не только текстовые - генерит структурированные и предоставляет искоробочный претти-принтер для них для тех, кому свой писать неохота
Крылатый
Круто. Спасибо.)
Alexander
3 PR на fast-builder, все таки хоть что-то ползное от олимпиадки было
Vasiliy
Какая разница по времени была между обычным билдером, фаст билдером и патченым фаст билдером?
Alexander
не помню
Alexander
патчи там тривиальные на то чтобы StringLen класть (в итоге можно создавать кучу CStringLen вместо кучи байтстрингов
Alexander
и на то чтобы можно было указать размер буфера при hPutBuilder
Alexander
иначе надо было workaround через toLazyByteStringWith
Alexander
но между байстринговым и Фаст разница приличная была
Alexander
что кстати удивительно на не threaded rts
Alexander
просто у Фаст билдер для вывода в handle ну очень тупые настройки дефолтные
Alexander
первый чанк 100
Alexander
следующие max ensure 4096
Dmitry
Мы этот вопрос обсуждали вчера в узком кругу, но так к чему-то и не пришли. допустим, хочется сделать простой клиент-сервер - т.е есть сервер, который держит in-memory БД и какую-то логику, и есть клиент, который туда ходит. HTTP использовать не хочется, потому что, 1) устали от серванта 2) какие-то запросы-ответы могут иметь поточный характер и HTTP использовать неудобно. Что бы взять? Клиент и сервер должны иметь разную кодобазу, но возможно, пересекаться какой-то библиотекой сериализуемых типов. Что можно взять? рассматривали CH/distributed-process(не то), transient/service (он загадочен и нет примеров). Хочется легковесного прозрачного rpc
Cheese
1. накрутить свои потоки/сессии поверх HTTP
2. protobuf
Alexander
protobuf это протокол
Anonymous
/stat@combot
Combot
combot.org/chat/-1001043143583
Dmitry
@cblp_su унылая перспектива
Mi Shа
Привет! Есть ли способ получать из списка/ другой коллекции элемент по индексу за O(1)?
Vasiliy
Mi Shа
Вектор из коробки не идет?
Mi Shа
Ясно, спасибо!
Alexander
из хэшмапа можно, но с константами похуже
Alexander
а там потинжексу, тогда вектор, да