
Misha
15.11.2016
12:12:40
пошел читать
конечно понятно почему это плохо, но без них код становится ужасным
или просто некомпилируемым
все зависимости в одном месте, в итоге модуль, который будет компилироваться и ghc и ghcjs будет зависеть вообще от всего, а должен наоборот, не зависеть ни от чего, по возможности

Google

Alexander
15.11.2016
12:22:47

Misha
15.11.2016
12:23:09
а
а вот это интересно
просто возьмет первый попавшийся?

Anatolii
15.11.2016
12:29:46
я для каждой такой сущности создаю модуль
и там описываю сущности
мне наоборот нравится что все в одном месте
я потом через 1 модуль все эти сущности реимпорт делаю
правда насчет GHCJS - действительно не приятно будет
но я таким не занимался сезе

Misha
15.11.2016
12:30:44
ну это не совсем вопрос вкуса, это скорее вопрос того, как работать с зависимостями

Anatolii
15.11.2016
12:31:02
ну у теябю все равно все приложение зависит от этого всего
а ты игрался с GHCJS?

Google

Misha
15.11.2016
12:31:23
только начал

Anatolii
15.11.2016
12:31:41
а там есть что-то типа лайврелоада страницы?

Misha
15.11.2016
12:31:42
и только на днях заставил это добро работать с reflex
хороший вопрос

Anatolii
15.11.2016
12:31:58
ну во время разработки что-то поменял чуток

Misha
15.11.2016
12:32:04
вроде как есть, но я до этого не дошел пока

Anatolii
15.11.2016
12:32:06
и чтобы быстро результат увидеть

Misha
15.11.2016
12:32:17
да, я понял, но не знаю

Anatolii
15.11.2016
12:32:26
интересно

Misha
15.11.2016
12:32:26
подозреваю, что все плохо
или это может сделать Luite но для остальных это сильно сложно
самый облом для меня оказался, что официальный servant-client не поддерживает ghcjs
чего я собственно хотел
то есть чтобы клиент генерировал ClientM, работающий через xmlHttpRequest
но этого пока нет, есть целых две сторонние имплементации для старых версий серванта, но они не компилируются с новым
так что там все очень сырое пока
и уж тем более live reload
с другой стороны, куча народу это пилит сейчас, так что скоро все будет круто, думаю

Alexander
15.11.2016
14:58:07

Misha
15.11.2016
15:05:02
красиво

Google

Misha
15.11.2016
15:34:13
то есть я в общем верю, что это сделано for a reason, но это брутальщина какая-то конечно
А может кто-нибудь посмотреть вот на это http://lpaste.net/340541 и сказать, почему это плохо? Идея в том, что мы берем значение либо из кэша, либо делаем так, чтобы только первый запросивший клиент инициировал long IO action, а остальные блокировались на TMVar и ждали, пока IO action закончится, и потом все одновременно получали бы это значение. Я тут сильно подозреваю, что изобрел велосипед с додекаэдральными колесами. Есть ли какие-то хорошие библиотеки для этого?

SimpleX
18.11.2016
04:36:27
А зачем так делать?
Ты хочешь запоминать результат долгого вычисления, это называется memoization

Konstantin
18.11.2016
04:38:22
ну я так понял, что остальные треды должны ждать вычисления, а не повторять его
до мемоизации

SimpleX
18.11.2016
04:42:38
https://hackage.haskell.org/package/io-memoize-1.1.1.0/docs/System-IO-Memoize.html
Внутрь не заглядывал
eagerlyOnce как раз то, что нужно

Misha
18.11.2016
09:14:01
во! спасибо, посмотрю
код, который я выложил, оказался плохой, там возникает дедлок, если потоков больше двух. Интересно было бы понять, почему, но лучше взять библиотечную функцию
хотя судя по исходникам, это не совсем то

Misha
18.11.2016
11:16:25
В конечном счете сделал через Async, там никаких дедлоков не возникает http://lpaste.net/340541

Alexander
18.11.2016
14:45:02
нету гарантии что только 1 раз запустится тред
нету гарантии, что не перепишется, то, Value на Promise
хотя почему там deadlock сходу не вижу
ну и там MVar было бы проще

Misha
18.11.2016
14:51:04
да, между проверкой и writeTVar есть окно, когда другие могут влезть и запустить

Alexander
18.11.2016
14:51:28
хотя Value на Promise я загнул

Google

Misha
18.11.2016
14:51:51
переход от Empty -> Promise неатомарный
тут как ни крутись

Alexander
18.11.2016
14:51:58
угу
тут если использовать то MVar
т.к. там IO можно запустить

Misha
18.11.2016
14:52:19
надо Mvar попробовать
да
по идее Async должен взять на себя все случаю с exceptions и должно получиться без всякой страшной лапши с catch/finally

Admin
ERROR: S client not available

Alexander
18.11.2016
14:53:35
join $ modifyMVar (\case Empty -> do { async »= \x -> return (Promise x, wait x) } ; Promise w -> return (Promise w; wait w); }
Value кстати не нужно Async его уже содержит

Misha
18.11.2016
14:58:29
о!
лихо
буду осмыслять
спасибо

Alexander
18.11.2016
16:42:34
Еще можно unsafePerformIO foo
Если NOINLINE сделать
Но лучше так не делать

Misha
18.11.2016
16:43:07
о нет
для меня это имеет еще и некоторый педагогический смысл

Google

Misha
18.11.2016
16:43:57
поэтому лучше сделать "правильно", а не прогнуть систему под себя

Anatolii
18.11.2016
16:46:59
Наверное лучше все что содержит unsafe лучше не делать

Ruslan
18.11.2016
21:46:33
Привет всем. Когда-то установил себе haskell-stack, немного поигрался, месяц не трогал, думал начать проект, стал делать, и теперь постоянно выдает такую ошибку в линковщике(здесь про gcc, но у меня такая же с ghc). Может, кто сталкивался?
http://stackoverflow.com/questions/1521859/nonrepresentable-section-on-output-error-during-linking-on-linux
Сделано:
- переустановил stack
- удалил ~/.stack

Alexander
18.11.2016
21:56:22
Debian?

Ruslan
19.11.2016
03:13:33
Да, sid

Alexander
19.11.2016
05:17:50
Используй cabal master
Стек не пофиксили еще вроде
В дебиане уже слишком новый gcc еще и с -fPIE если не ошибаюсь

Ruslan
19.11.2016
05:58:14
Блин, точно. Я ж обновился на полтора гига неделю назад
Спасибо!

Судзумия
19.11.2016
10:08:58
В ДЕБИАНЕ СЛИШКОМ НОВЫЙ ГЦЦ

Sergey
19.11.2016
10:13:16

Alexander
19.11.2016
10:14:29
Он с дурацкими опциями еще собран
Ну как для ghc дурацкими

Судзумия
19.11.2016
10:15:43
А в арче, наверное, слишком старый gcc ?

Sergey
19.11.2016
10:17:49
> В дебиане уже слишком новый gcc еще и с -fPIE
> с -fPIE
> 2017
ну наконец то хоть в серверном линуксе стали интересоваться безопасностью

Alexander
19.11.2016
10:30:50
ну PIE было всегда
https://ghc.haskell.org/trac/ghc/ticket/12759
Там еще пара багов прилинковано

Aldar
21.11.2016
05:19:17
http://colah.github.io/posts/2015-09-NN-Types-FP/