
SimpleX
31.10.2016
08:56:52
Я бы не стал использовать исключения напрямую
Так можно обернуть в EitherT и получить ошибку в Left

Anatolii
31.10.2016
08:58:16
я вот тоже поддерживаю такой подход

Google

Anatolii
31.10.2016
08:58:24
потому что это какая-то джава получится а не хаскель

SimpleX
31.10.2016
08:58:38
Либо так, либо без исключений, тем более в либе

blkmrkt
31.10.2016
08:59:06
(MonadIO io, MonadThrow io) => ... -> io a
я пока слабо себе представляю как пользоваться монадами. по сигнатуре видно что это что-то, заверноутое в что-то другое, но непонятно тип ли это из какой либы монад, или подразумевается что его нужно определять самому

SimpleX
31.10.2016
08:59:08
Имхо
Пакет exceptions
Там есть доки

Evgenij
31.10.2016
08:59:55

SimpleX
31.10.2016
09:00:11
Нафиг errors

Evgenij
31.10.2016
09:00:19
Почему?

SimpleX
31.10.2016
09:01:26
Exceptions Best Practices - School of Haskell | School of Haskell
https://www.schoolofhaskell.com/user/commercial/content/exceptions-best-practices#exceptt-io-anti-pattern

Evgenij
31.10.2016
09:01:40
Спсб

SimpleX
31.10.2016
09:01:50
Потому что это еще один плохой способ
И лучше в своем коде писать общий вид функций

Google

SimpleX
31.10.2016
09:03:54
То есть не IO, а MonadIO
Не Int/Word etc, а Integral или Num. Там, где это имеет смысл, конечно.
Тогда либой будет куда легче пользоваться

corpix
31.10.2016
11:26:01
О благородные судари, подскажите пожалуйста изучающему.
В хаскеле "+", например, является функцией. Отсюда у меня возникает вопрос, является ли функцией "="?

Anatolii
31.10.2016
11:50:30
это лгеко проверить
зайди в ghci
и забей
:t (=)
если это функция
то оно тебе тип покажет
но я думаю что не покажет :)

corpix
31.10.2016
11:51:53

Anatolii
31.10.2016
11:51:59
мне очень Either нравится тем что возвращаемый тип всегда известен

SimpleX
31.10.2016
11:55:22
Either для Exception не катит
В этом и суть

Anatolii
31.10.2016
11:56:04
ну да
тут нельзя путать Exceptions и Errors

SimpleX
31.10.2016
11:56:43
А MonadError - ерунда, потому что создает видимость безопасности

Google

SimpleX
31.10.2016
11:57:09
То есть у тебя теперь 2 канала для ошибок, а не один

Anatolii
31.10.2016
11:57:22
ну скажем так, я бы если бы писал какой-то вебсервис
то у меня бы на самом верху был бы общий обработчик эксепшенов

SimpleX
31.10.2016
11:57:38
Потому что затолкай IO в стек трансофрмера и вуаля.

Anatolii
31.10.2016
11:57:39
с 500 ошибкой на клиент
и это считалось бы багом для меня
ну IO части надо писать вдумчиво
и ставить catch на Either

SimpleX
31.10.2016
11:58:28

Anatolii
31.10.2016
11:58:56
ну это на случай багов скажем так, я хочу просто все в Either передавать

SimpleX
31.10.2016
11:59:04

Anatolii
31.10.2016
11:59:06
ну я конечно новичок в хаскеле

Anatolii
31.10.2016
11:59:09
это я сейчас ьак вижу
я не правильно выразился
я же могу Exception в Either перевести
вот этим и заниматся там где IO пишем, чтобы все приложение с Either работало

SimpleX
31.10.2016
12:01:38
Да, с MonadCatch ты можешь делать то же самое
try $ myFunc a

Anatolii
31.10.2016
12:02:16
я про MonadCatch еще не знаю

SimpleX
31.10.2016
12:02:17
И будет Either SomeException a

Google

Anatolii
31.10.2016
12:02:19
спасибо
погляжу
круто

SimpleX
31.10.2016
12:02:43
Если надо Обработать, это хэндлеры

Anatolii
31.10.2016
12:03:02
в моем описание это был именно конвертер эксепшенов в эроры
да

SimpleX
31.10.2016
12:03:05
А просто вытащить и не упасть - вот так

Evgenij
31.10.2016
12:03:07

Anatolii
31.10.2016
12:03:09
хэндлеры - это другое

Admin
ERROR: S client not available

SimpleX
31.10.2016
12:03:59
А как ты собрался SomeException к MyException приводить?

Anatolii
31.10.2016
12:04:16
над описать какой-то конвертер

SimpleX
31.10.2016
12:04:32
Вот на хэндлерах и описывай же

Anatolii
31.10.2016
12:04:46
ну после try ?

SimpleX
31.10.2016
12:05:28
После try все равно придется кастовать

Vladimir
31.10.2016
16:05:50
I put on my robe and wizard's hat.

Boris
31.10.2016
16:14:54

Alexander
31.10.2016
16:50:05
Там в разделе hpc было
Не уверен что про Haskell вообще
Попозже поищу

Google

Boris
31.10.2016
16:52:18

blkmrkt
31.10.2016
17:05:43
Как упростить упаковку ByteString из Int-ов? Я не верю что это нормально:
let reqUrlEncoded = urlEncodedBody [
("owner_id", L.pack $ show wall),
("post_id", L.pack $ show post),
("lang", "ru"),
("offset", L.pack $ show offset),
("preview_length", L.pack $ show 0),
("count", L.pack $ show 100),
("v", "5.50")
] initReq { secure = True, method = "POST" }
Он форкается один раз и живет вечно – в очередь пишут много разных воркеров, но мне неочевидно блокируется ли запись в очередь, пока выполняется publishMsg и сериализация ЖСОНа в его аргументах (186 строка)
как мне кажется, очередь блокируется лишь на момент ее опустошения в batch, и после 184 строки другие треды уже могут в нее писать

Sergey
31.10.2016
21:02:49
Большинство тратит больше времени на хаскельный однострочник, чем на С++ портянку, так зачем им это нужно? Для реальных проектов он не годен хотябы из-за этого.

Vladimir
31.10.2016
21:03:35
Зачем такие вещи говорить? Нам все нравится и интересно!

Vladislav
31.10.2016
21:04:02

Vladimir
31.10.2016
21:04:18
Ой щас начнется

Sergey
31.10.2016
21:04:46
Дак и с неоднострочниками таже проблема.

Paul
31.10.2016
21:04:58
Код-расизм.

Anatolii
31.10.2016
21:05:16
сразу видно, у человека большой опыт работы с хаскелем

Vladimir
31.10.2016
21:05:16
Больше на шовинизм похоже)

Sergey
31.10.2016
21:05:57
Это правда
сразу видно, у человека большой опыт работы с хаскелем

eugene
31.10.2016
21:07:03

Sergey
31.10.2016
21:07:10
По сути на хаскеле пишут ради вызова, не практичности ради

Misha
31.10.2016
21:07:33

Timothy
31.10.2016
21:07:44
кто-то решил на ночь поесть и вы тут его кормите

Misha
31.10.2016
21:07:54

Vladislav
31.10.2016
21:08:09

Anatolii
31.10.2016
21:09:37
ты прав:)