Misha
в идеале unnest и все
Vladislav
https://hackage.haskell.org/package/tuple-morph-0.1.0.0/docs/Data-Tuple-Morph.html
Misha
о, круто, спасибо
ㅤ
https://hookrace.net/blog/a-taste-of-haskell/
Vladislav
Кто-нибудь тут пробовал Idris? https://en.wikipedia.org/wiki/Idris_(programming_language)
Alexander
чуть-чуть поиграться, понравилось, многие вещи которые запаришься писать на haskell там очевидные
Alexander
но не уверен, что для реального кода подойдёт
Vladimir
Опрос! А вы все в Either запихиваете значение в Right, а ошибку в Left?
franza
https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Either.html
franza
> The Either type is sometimes used to represent a value which is either correct or an error; by convention, the Left constructor is used to hold an error value and the Right constructor is used to hold a correct value (mnemonic: "right" also means "correct").
Anatolii
Ну монадой either не получится по другому пользоваться
Vladimir
да, я видел конвеншн, я как раз хотел убедиться, что все так и делают)
Vladimir
ну паттернматчить можно как угодно, в принципе
Vladimir
ну да я понял
Vladimir
вопрос можно закрыть)
franza
кстати, вот хотел спросить
franza
когда я довольно давно читал про IO я увидел то в хаскеле ошибки бросаются как в других языках. разве не более haskell-way возвращать какой-нибудь Either?
Vladimir
Ну IO подразумевает сайдэффекты из внешнего мира, вообще неизвестно какие. Если что-то фейлится, то можно сделать -> IO (Maybe) или IO (Either)
Vladimir
не везде же ошибки бросаются, в принципе
Vladimir
https://hackage.haskell.org/package/base-4.9.0.0/docs/System-Environment.html Вот, например, lookupEnv
franza
ну как бы да
franza
но вспоминая тот же Rust, у них это сделано через Result<T, E>
franza
просто получается, что в хаскеле есть ошибки двух типов
franza
которые возвращаются как значение и которые бросаются, как в других языках
franza
и понятно, что однообразие было бы лучше
franza
вот мне интересно, почему было сделано так, а не иначе
Anatolii
Ну идеоматично как раз either использовать
Anatolii
А так да, не приятно видеть error где-то
franza
кстати, кто-нибудь дочитывал haskellbook?
franza
какой feedback?
Vladimir
Может, так компилятор работает, он же не сразу в асскмбли код преобразует
Alexander
я не дочитал. мне стало лень и я поругался с крисом
Quet
поругался? )
Quet
я дочитал, норм книжка
franza
а что за история с Крисом?)
Alexander
Ну когда эти ребята haskell-lang сайт делали и вся эта история вокруг
Alexander
Там Крис и еще пара человек делали не очень хорошие действия, типа подписывания петиций именами людей с ней несогласных и т.п.
Alexander
И Крис из той компании один из самых неадекватных мвдаков
Alexander
Книжка впрочем хорошая
Anatolii
помойму вы это обсуждали в каком-то из подкастов
Alexander
Возможно
Alexander
Ну давно эта история и была
Alexander
Не новую, а альтернативную
blkmrkt
как дебажить чрезмерное потребление vmem? Запустил сейчас свой бинарник на сервере послабее с 4гиг ram, и он сдох на 100 параллельных подключениях через 5 минут
blkmrkt
есть может тут конфа кодеров на Rust?
Evgeniy
Может тут - правда мало участников
https://telegram.me/rustcoders
Alexander
prof и вперёд
Alexander
Если не боевой билд
Alexander
В принципе при наличии gdb и усидчивости можно и без prof
Alexander
Но это хитрая магия
Alexander
В ghc мануале не плохо описано как отлавливать
Anonymous
https://ghc.haskell.org/trac/ghc/wiki/Debugging
blkmrkt
Igor
SimpleX
Везде пихать Either, конечно, тоже не сахар
franza
franza
SimpleX
Maybe для ошибок типа "ок или не ок"
Anatolii
Да помойму either только и должен быть
Anatolii
От эрора хорошего не жди
SimpleX
Когда нужна причина - либо throwM, либо Left MyError
franza
franza
ну в общем, ты понял
franza
а есть какие-нибудь либы для IO, которые возвращают исключения через Either?
SimpleX
Так это
SimpleX
try
SimpleX
Из прелюда прямо
SimpleX
Или лучше всего использовать MonadThrow
SimpleX
Пакет exceptions
franza
ок, посмотрю
franza
у меня, кстати, есть вопрос
SimpleX
Оборачиваешь в EitherT SomeException IO
Anatolii
Во это да
SimpleX
И разве что асинхронные исключения пройдут
franza
я не очень хорошо знаю хаскель, знаю монады, совсем немного представляю как трансформеры работают. задача из жизни: мы читаем из файла конфиг и держим в памяти, подписываемся на редис канал и каждый раз когда в канал приходит сообщение мы считываем файл конфигов еще раз и обновляем содержимое памяти. решал я ее на NodeJS и решается она довольно просто. дело в том, что с моими знаниями хаскеля, я не представляю, что тут делать, а задача весьма реальная и касается изменения глобального стейта. как ее можно решить в хаскеле?
SimpleX
А в чем проблема?
SimpleX
Берешь либу для работы с редисом