
Alexander
24.09.2018
21:20:31
цензура на марше если чо
warp чистый тоже норм

Igor
24.09.2018
21:23:37
на любителя правда, как и есод
А что из фреймворков хаскельных не на любителя? Я вижу выше servant рекомендуют как самый лучший выбор. Серьезно, хочется знать, что стоит использовать программисту со средним знанием хаскеля для user facing сервера если вдруг предьявится возможность на хаскеле писать.

Alexander
24.09.2018
21:25:03
если нужно генерировать swagger, документацию, тесты быть RFC-compatible, поддерживать разные accepted content-type то servant очень хороший выбор

Google

Alexander
24.09.2018
21:25:22
у него есть проблемы, он может долго компиляться если 100600 endpoint-ов
у него могут быть очень сложные^W длинные ошибки типов
которые просто не нужно читать, а если видишь ошибку, то пытаться её упростить
если нужно простой сайт на 1.5 endpoint-а, который пофи что отвечает в случае ошибки, то можно брать что-нибудь другое
я обычно вообще начинал на warp чистом, но после того как несколько раз заметил, что я начинаю переизобретать servant - стал с него начинать
вообще все поверх wai/warp

Igor
24.09.2018
21:30:13

Alexander
24.09.2018
21:30:35
я на есоде делал только цитатник, оно работало но мне не понравилось
а зачем в споке стейт свой?

Igor
24.09.2018
21:48:15
а зачем в споке стейт свой?
Не имею понятия. Весь мой опыт заключается в том, что год назад за полдня собрал сервер с простым json api и in-memory db для тестирования видеоигры (чтобы не к продакшну подключаться), сервер просто эмулировал аутентификацию и случайные данные отсылал клиентам. Я тупо следовал туториалу, и все как надо работало. Была какая-то проблема с хэдером при запросе из webassembly клиента (у нас игры ?) , я создал ишью на гитхабе и автор помог разобраться.

Alexander
24.09.2018
21:49:10
вообще spock норм

Terminator
24.09.2018
21:50:19
꧁꧂ ꧁꧂ ꧁꧂ ꧁꧂ ꧁꧂ ꧁꧂ будет жить. Поприветствуем!

Dmitry
25.09.2018
03:34:38
у него могут быть очень сложные^W длинные ошибки типов
Это не проблема, как и долгая компиляция. Мы используем servant-generic (который был впилен прямо в servant с версии 0.14) и разбиваем группы эндпоинтов с одинаковым префиксом по разным модулям. Компилируется так же быстро, как и любые другие Haskell модули, проблем с длинными ошибками никогда не было. Цена за это: небольшой (совсем чуть-чуточку) бойлерплейт.
В данный момент я уже не вижу особых причин не использовать servant, а использовать другой фреймворк. Уж слишком много преимуществ из того, что ты описываешь свое Web API через тайплевельный DSL. Сложности бывают только тогда, когда надо инстансы нетривиальные писать, когда что-то не работает. Ну и использовать servant /= разрабатывать servant, для использования хватает самых базовых знаний в магии на типах в Haskell.

Google

Leonid
25.09.2018
04:20:51

Vitaly
25.09.2018
04:45:31
Ну в общем на фотке слева от Брайтнера Eric Seidel

Yuriy
25.09.2018
05:00:06
почему haddock может зависать на haskell-src-exts-1.20.2? то есть жрёт 100% CPU и за всю ночь ничего не сделал


Alexander
25.09.2018
06:46:05
Это не проблема, как и долгая компиляция. Мы используем servant-generic (который был впилен прямо в servant с версии 0.14) и разбиваем группы эндпоинтов с одинаковым префиксом по разным модулям. Компилируется так же быстро, как и любые другие Haskell модули, проблем с длинными ошибками никогда не было. Цена за это: небольшой (совсем чуть-чуточку) бойлерплейт.
В данный момент я уже не вижу особых причин не использовать servant, а использовать другой фреймворк. Уж слишком много преимуществ из того, что ты описываешь свое Web API через тайплевельный DSL. Сложности бывают только тогда, когда надо инстансы нетривиальные писать, когда что-то не работает. Ну и использовать servant /= разрабатывать servant, для использования хватает самых базовых знаний в магии на типах в Haskell.
generic не пробовал, когда-нибудь посмотрю, но без ошибки могли напугать новичка, а разговор про них
сколько у нас endpoint-ов в встречаются максимум?
100+ ?
я просто не уверен, что servant себя адекватно поведет


Kirill
25.09.2018
06:54:11
чтот смутно вспоминается, что ещё hi-файлы генерились гигабайтные для таких вариантов
и где-то это боком вылезало

Alexander
25.09.2018
07:01:06
гигабайтные я только в ether помню, но вообще там проблемы есть
ещё почти все generic подходы тормозили на 10+ полях
мне интересно если разбивать Api на type MyApi = Api1 :<|> Api2 :<|> ApiN спасёт ли, или
все же обязательно будет делать middleware, которая кусок роутинга сделает.
вообще я бы всем говорил используйте сервант ( и говорю)
но там есть некоторая вербозность пока
@A64m_qb0 хочешь на мои вопросы по линзам поотвечать?
если есть json: {"foo": [bar,baz]} как вытщить bar?

Iva
25.09.2018
07:40:03
на хаселе есть что - то типа akka-http / http4s или akka-streams?
Рестики педалить
и потоково данные колбасить

Alexander
25.09.2018
07:41:15
для рестиков есть сервант, спок, и прочие звери

Google

Alexander
25.09.2018
07:41:27
протоколы есть как низкоуровневые так и другие
вопрос подразумевает хорошее знакомство со скало экосистемой, чтобы показать конкретно, что что делает

Iva
25.09.2018
07:42:16
ну, dsl для эндпоинтов, с экстракторами и прочим

Alexander
25.09.2018
07:45:06
/shrug
эти слова могут слишком много значить
/me посмотрит документацию вышеперечисленных либ вечером

A64m
25.09.2018
07:57:42

Alexander
25.09.2018
07:58:09
я сделал через ^? key "foo" . nth 0 так норм?

A64m
25.09.2018
07:59:08
норм

Alexander
25.09.2018
08:00:43
дальше у нас есть key "foo" . _Array а как ему сказать, чтобы все в [] конвернтул в _Integral или упал?
key "foo" . _Array . _Integral же не протатит ?

A64m
25.09.2018
08:01:35
_JSON :: [Int]

A64m
25.09.2018
08:01:53
ну или другой тип, идея, думаю, понятна

Alexander
25.09.2018
08:02:26
понял

Kakadu
25.09.2018
12:13:04
Народ, а как в хаскелле получить надпись stackoverflow ? А то мои нехвосторекурсивные функции просто память жрут

Андрей
25.09.2018
12:13:51
никак, это волшебный язык )

Kakadu
25.09.2018
12:13:56
я их стэком компилирую

Kirill
25.09.2018
12:14:10
никлас вродеж когда-то не очень давно уговорил саймона сделать анлим стэк
так что проще heap overflow словить

Alexander
25.09.2018
12:14:48
+RTS -K1m ?

Google

A64m
25.09.2018
12:15:07

Alexander
25.09.2018
12:15:30
мне казалось сейчас лимитированный но большой

A64m
25.09.2018
12:16:03
да
только лимит динамический
80% или вроде того от объема памяти (только вот какой - не помню)

Alexander
25.09.2018
12:17:10
-K ⟨size⟩
Default: 80% of physical memory
Set the maximum stack size for an individual thread to ⟨size⟩ bytes. If the thread attempts to exceed this limit, it will be sent the StackOverflow exception. The limit can be disabled entirely by specifying a size of zero.
This option is there mainly to stop the program eating up all the available memory in the machine if it gets into an infinite loop.

Admin
ERROR: S client not available

Alexander
25.09.2018
12:17:23
офигеть я даже флаг правильно вспомнил

Kakadu
25.09.2018
12:24:26
А этот ман где смотреть?
А вообще на таких программах корректноэто пытаться поймать?
mysum = foldr (+) 0
main = print (mysum [1..1000000])

Alexander
25.09.2018
12:27:33
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/index.html#
[qnikst@nixos:~]$ cat 1.hs
mysum = foldr (+) 0
main = print (mysum [1..10000000])
[qnikst@nixos:~]$ ghc -O0 -rtsopts 1.hs
[1 of 1] Compiling Main ( 1.hs, 1.o )
Linking 1 ...
[qnikst@nixos:~]$ ./1 +RTS -K1m
1: Stack space overflow: current size 33624 bytes.
1: Use `+RTS -Ksize -RTS' to increase it.
как в ghci/runhaskell задать - не знаю

Kakadu
25.09.2018
12:40:01
Сейчас получается что если суммировать от 1 до миллиона, то рубеж размера стека где-то между 30 и 40М и не зависит foldl или foldr
Я не хочу пока лезть в foldl', хочу пример где хвостовая важна. Где его искать?
буду фибоначчи тестить лучше
Не, плохой пример. мгновенно работает

Sphere
25.09.2018
12:47:15
Здравствуйте.Какую книгу почитать для начала по Haskell?

Denis
25.09.2018
12:47:38

Google

Aleksey
25.09.2018
12:57:07
Есть расход памяти на thunks с ленивыми суммами
Если написать на foldl', то "стека хватит" :)

Yuriy
25.09.2018
13:37:46

Alexander
25.09.2018
13:38:36
но если нужно столько стека процессу, то это странно

Yuriy
25.09.2018
13:41:35

Alexander
25.09.2018
13:41:54
ничего не понял
компиляция врятли стек ест
там скорее надо будет хип ограничивать..
@cblp_su или я не понял твоего комментария?

Yuriy
25.09.2018
13:51:24
нет, я это я перепутал стэк с хипом

Alexander
25.09.2018
13:51:24
а ок

Yuriy
25.09.2018
13:52:05
у товарища проблема с памятью, а не со стэком, по-моему

Aleksey
25.09.2018
13:52:23
и он думает, что проблема со стеком

Alexander
25.09.2018
13:53:49
в общем неудачный foldr как раз на stackoverflow помрёт

Yuriy
25.09.2018
14:44:02
Spock для работы с формами использует какие-то digestive-functors, которые, кажется, очень плохо поддерживаются