@haskellru

Страница 353 из 1551
Vladimir
11.08.2017
17:48:51
Правда не особо активно.

А чатик зашел, ну потому что хочу с фп разобраться.

Просто для некоторых задач удобная штука.

Alexander
11.08.2017
18:30:17
для всех задач?

Google
Aleksey
11.08.2017
18:32:50
для всех, конечно

Alex
11.08.2017
20:44:57
https://github.com/erkmos/haskell-companies

Vladislav
11.08.2017
21:12:31
IMVU Silicon Valley, CA, USA Yes 3D Chat божечки

https://secure.imvu.com/welcome/

а вот это неплохо https://kittyhawk.aero

а вот это неплохо https://kittyhawk.aero
только у них все открытые позиции на C++(

Tesla Palo Alto, CA, USA Yes Automotive ? они правда используют haskell?

а фейсбук, по их мнению, в Лондоне, ok

Евгений
12.08.2017
00:55:52
интересно
Наверное имеется ввиду pypy

вывод типов на самом деле не особо дорогая вещь для системы типов в хаскелле
Ну это если экстешонов нет. Включил system fn -- получил потенциальную бесконечность

Alexander
12.08.2017
06:20:57
почему там Tweag не hiring

интересно

а фейсбук, по их мнению, в Лондоне, ok
Марлоу то там сидит? судя по тому что HR пишут

Google
Vladislav
12.08.2017
06:22:46
но команда какого-нибудь haxl-а почти целиком в Калифорнии, например

Yuriy
12.08.2017
07:09:40
мы тоже нанимаем. надо исправить табличку

Denis
12.08.2017
09:15:04
Кажется мне что тут не оптимальный код на хаскель написали http://akgupta.ca/blog/2014/06/21/k-nn-algorithm-in-golang-and-haskell/

? animufag ?
12.08.2017
10:29:52
ну в коментах скинули https://www.reddit.com/r/haskell/comments/27tcvz/knearest_neighbors_in_haskell_is_elegant_but_slow/

так и не сравнили эти решения против го на одной машине

melancholiac
12.08.2017
11:16:10
хаскель не боится переполнения стека нехвостовой рекурсией благодаря ленивости?

Dmitry
12.08.2017
11:16:33
Бояться может только разработчик

Но у него есть профайлер

Denis
12.08.2017
11:20:54
https://blogs.msdn.microsoft.com/commandline/2017/02/09/haskell-on-bashwsl/

? animufag ?
13.08.2017
00:33:24
https://github.com/tippenein/docs-plox Оставлю эту ссылку здесь, чтобы не забыть посмотреть что там

Denis
13.08.2017
09:04:40
у меня только по RS есть примеры) (что пилил пока игрался)

Даня
13.08.2017
13:21:00
как перевести strong lax monoidal functor на русский язык? http://strictlypositive.org/IdiomLite.pdf

строгий моноидальный функтор - это понятно, а lax что означает, никто не знает русскую терминологию?

13.08.2017
13:27:27
Гугл говорит , что "слабый функтор" ))

Даня
13.08.2017
13:38:04
строгий слабый функтор, звучит так себе, лол)

Denis
13.08.2017
13:39:09
Гуталакс

Даня
13.08.2017
13:42:18
@xgrommx, кек

Alexander
14.08.2017
12:29:10
кто с http-reverse-proxy работал?

чего-то оно у меня не хочет web-socket соединение проксировать

Google
Misha
14.08.2017
20:53:09
вопрос знатокам, вот есть у меня вот такая штука data ErrorCachingStrategy = NoErrorCaching | TimedCaching NominalDiffTime и есть у меня что-то типа type family IOResult_ v caching type instance IOResult_ v NoErrorCaching_ = Either SomeException v type instance IOResult_ v TimedCaching_ = Either (SomeException, UTCTime) v но чтобы это работало на уровне типов мне городить либо вот такое: data NoErrorCaching_ data TimedCaching_ = TimedCaching_ NominalDiffTime либо что пытаться делать с DataKinds. Можно ли тут что-то придумать, за счет промоушена data values в типы? Нечто вроде (оно не компиируется с DataKinds) type instance IOResult_ v 'NoErrorCaching = Either SomeException v

ну и вообще, я возможно неверно понимаю использование значений на уровне типов

а вот, сам допер data ErrorCaching = NoErrorCaching | TimedCaching NominalDiffTime type family IOResult_ v (caching :: ErrorCaching) type instance IOResult_ v NoErrorCaching = Either SomeException v type instance IOResult_ v (TimedCaching _) = Either (SomeException, UTCTime) v

как этим пользоваться теперь - другой вопрос, но уже лучше

Alexander
15.08.2017
06:57:22
можно если тип сделаешь гадтом

и в разных конструкторах будет разные тип

melancholiac
15.08.2017
10:48:11
если у нас есть структура (дерево например) и нам необходимо вставить новую ячейку или изменить существующюю, то необходимо перестраивать всю структуру?

? animufag ?
15.08.2017
10:50:05
Да

Дмитрий
15.08.2017
10:50:50
Ну не факт, что всю

melancholiac
15.08.2017
10:51:00
ну допустим все ноды кроме добавленной кэшируются, а что с производительностью?

Alexander
15.08.2017
10:51:20
что значит кешируются?

melancholiac
15.08.2017
10:51:39
что значит кешируются?
память на них вновоь не выделяется

Alexander
15.08.2017
10:52:09
если нужно вставить, изменить ячейку, то перестроится часть структуры, от головы до узла (что это именно значит зависит от структуры)

выделится

melancholiac
15.08.2017
10:53:00
?

Alexander
15.08.2017
10:53:06
память выделится в любом случае если ты не руками пишешь в какой-нить MutableByteArray# и работаешь с unboxed объектами

melancholiac
15.08.2017
10:53:40
я сейчас смотрю на тривиальную реализацию и у неё прям все очень плохо с производительность

Alexander
15.08.2017
10:54:26
/shrug

Дмитрий
15.08.2017
10:54:45
Alexander
15.08.2017
10:54:47
(хм.. слаковые привычки не работают тут)

Google
Alexander
15.08.2017
10:55:12
кешируются = память не выделяется, это какое-то странное определение:/

я не умею в таких общаться, надо словарь выстраивать

в общем если структура иммутабельная, то нужно перестраивать её часть, в паталогических случаях это дорого

память выделяется много и часто, но стоимость этого дешевле, чем скажем в си

часть методов могут unbox-ить параметры, тогда выделений как таковых может не быть

melancholiac
15.08.2017
10:58:47
Aleksey
15.08.2017
10:59:26
Это "данные по месту", вместо указателя

Alexander
15.08.2017
10:59:26
формально это убирать indirection, когда ты вместо указателя хранишь данные сразу

но так тоже подойдет

"стек" в модели вычислений в haskell штука тоже особая

т.к. он живет в хипе, и обычный стек используется для сишных вызовов

т.к. у нас CPS модель

(я щас не очень точные термины пишу, но все же)

melancholiac
15.08.2017
11:00:55
а все таки как обходится с большими структурами данных? я слышал хаскель дружит с си...может просто использовать сишные функции для этого?

Alexander
15.08.2017
11:01:18
ну у меня не возникало особых проблем с большими структурами данных

обычно где нужен хороший memory footprint, все равно на векторах что-то будет

Aleksey
15.08.2017
11:02:25
Часто скорости помогает просто правильная расстановка бэнгов :)

И вообще Окасаки вон книжку даже написал про структурки, там есть и про скорость

Alexander
15.08.2017
11:03:18
вот да, без них легко дров наломать снепривычки

melancholiac
15.08.2017
11:03:28
очень сложно, укатываюсь читать

Google
Alexander
15.08.2017
11:03:45
лучше сначала с языком на ты встать, там тогда попроще будет

Aleksey
15.08.2017
11:04:17
При этом ленивость же дико помогает эффективности функциональных структур - куча ненужной работы откладывается и частенько не выполняется вообще :)

Alexander
15.08.2017
11:04:32
вообще со строгими ephemeral структурками, на сях и т.п. попроще будет,но с ненулевой вероятностью цена FFI может быть дороже цены аккуратного написания структурки в haskell

Aleksey
15.08.2017
11:04:43
Всякие Finger Trees очень хорошо на ленивость ложатся

Alexander
15.08.2017
11:05:00
ну везде где нужно амортизированное время и расшаривать стоимость

в общем-то в окасаки ленивость и появляется в той главе, где начинаеются честный подсчет сложностьи если действительно используется персистентность

ну это наверное уже оффтоп

если нужно что-то и срочно и понять, то возможно проще просто показать какой-то гист и попросить помочь

(не идеальный вариант конечно)

Den
15.08.2017
11:32:56
Подскажите, плиз, вот ведь type не может быть частично применён, но не всегда можно (дёшево) сделать newtype для instance-а. Например, делаю небольшой рефакторинг: в одном модуле есть newtype BaseT e w m a = .. { .. ReaderT e (WriterT w m) a }, в другом нечто длинное, типа type Session st m a = BaseT (SessionEnv (SessionState st)) Builder (CGIT m) a, и ещё в третьем: type SomeSession a = Session SomeState IO a. Просто так это всё не поменять - много где тип "гвоздями прибит". Но всё же, необходимо сделать instance SomeClass SomeSession... Я пока придумал уродливый хак - дублирование type-ов: type SessionP st m = BaseT (SessionEnv (SessionState st)) Builder (CGIT m), type SomeSessionP = SessionP SomeState IO и далее instance SomeClass SomeSessionP. Оно работает, но неужто по-иному нельзя?

Alexander
15.08.2017
11:38:43
а SomeClass для BaseT написать нельзя чтоли?

особенно если BaseT твой

Den
15.08.2017
11:39:28
ну ИМХО оно будет ещё более некрасиво, чем сейчас :)

Alexander
15.08.2017
11:39:42
instance SomeClass (BaseT e w m)

Den
15.08.2017
11:40:13
нет, там надо именно от всей "простыни" SomeSession-а делать instance

и каждый раз всё это писать - несколько ИМХО неправильно (особенно если потом, например, CGIT придётся на что-то менять). Может, я не понял смысл type, но использовал его тут как alias для типов, чтоб каждый раз "простыни" не повторять. Но вообще, это я писал 4 года назад, сейчас оно уже legacy, но некоторую часть из него пере-использовать хотелось бы.

Притом BaseT и её производные браться как раз не будут, мне приходится с ними возиться, чтоб отделить от них "высокоуровневый" код.

Страница 353 из 1551