
Index
13.01.2018
14:39:29
Challenge: у меня есть библиотека для монадических эффектов, написанная с несколькими unsafeCoerce, но я хотел бы, чтобы их не было. У кого есть настроение побороться с компилятором?

Dmitry
13.01.2018
14:40:15
компилятор всё равно победит

Index
13.01.2018
14:40:40
Ну я его пока что победил через unsafeCoerce, а хочется как-то по-честному.

Alister
13.01.2018
14:43:28

Google

Denis
13.01.2018
14:45:53

Index
13.01.2018
14:46:33
Да, но это один 'unsafeCoerce'. А сейчас я еще один использовал, и мне стало немного печально.

Denis
13.01.2018
14:48:23

Index
13.01.2018
14:49:13
Ну я начинал с coerce, но оно там не сошлось как-то
К тому же с использованием Any об этом речи идти не может.
Так что надо для начала придумать, как от Any избавиться.

kana
13.01.2018
14:52:50

Index
13.01.2018
14:53:02
https://github.com/int-index/caps

kana
13.01.2018
14:54:49

Denis
13.01.2018
14:55:14
Гонзалес стайл

kana
13.01.2018
14:58:37
а, хм, идея в том, чтобы разбивать один эффект на много разных? И чтобы потом подменять один логгер над IO на другой?
как в пурсе Eff вместо IO

Nikita
13.01.2018
15:02:23

Google

Index
13.01.2018
15:03:09
оно экспрессивнее тайпклассов, потому что не обязательно чтобы инстансы были на топ-левеле, их можно составлять в рантайме
то есть это такой fixed point над ReaderT мапы из словарей с эффектами
То есть если имеем эффекты E1, E2, E3, то это эквивалент
ReaderT
( E1 '[E1, E2, E3],
E2 '[E1, E2, E3],
E3 '[E1, E2, E3] )
А основная проблема, которую решает фреймворк, это возможность такую мапу расширять (чтобы добавить E4) или менять эффекты так, чтобы это отразилось на других.
Например, если нетворинг и база данных используют логгинг, то когда мы подменяем словарик логгинга, нам надо обновить нетворкинг и БД тоже.
Если использовать эффекты mtl-style, то такого не будет.

Yuriy
13.01.2018
17:11:01
в чём разница между пакетами gtk и gtk3?

Andrei
13.01.2018
17:30:39

Yuriy
13.01.2018
17:30:59
то есть старьё?

Andrei
13.01.2018
17:31:34
да

Yuriy
13.01.2018
17:56:27
спасибо

Mikhail
14.01.2018
09:06:51
Привет! Подскажите, пожалуйста, как в ghci можно засовывать строковые литералы туда, где требуется ByteString?
Couldn't match expected type `bytestring-0.10.8.2:Data.ByteString.Lazy.Internal.ByteString' with actual type `[Char]Написал в ghci {-# LANGUAGE OverloadedStrings #-}, но не помогло

Dmitry
14.01.2018
09:07:58
Эммм, не знаток, но может http://hackage.haskell.org/package/bytestring-0.10.8.2/docs/Data-ByteString-Lazy-Char8.html#v:pack

Mikhail
14.01.2018
09:13:41

Leonid
14.01.2018
09:14:34
:set -XOverloadedStrings

Mikhail
14.01.2018
09:15:23

Yuriy
14.01.2018
09:26:58
обратите внимание, что ByteString не адекватно преобразуется из String (адекватно только для ASCII)
то есть пригодно только для каких-то технических вещей вроде ключевых слов
а если засунуть человеческий текст, даже на английском языке, он может быть внезапно испорчен

Google

Mikhail
14.01.2018
09:31:31
А почему тогда Data.Aeson использует его для декодирования из джсона?

Aleksey
14.01.2018
09:38:11
Энкодинг надо делать

Yuriy
14.01.2018
09:38:28
нет, aeson не использует ByteString.pack (я не смотрел в код, но было бы странно)
сам по себе ByteString вполне адекватно хранит байты

Mikhail
14.01.2018
09:41:41

Aleksey
14.01.2018
09:42:40
Data.ByteString.UTF8.fromString

Yuriy
14.01.2018
09:44:59
но это уже немного в сторону, я просто хотел сказать, что ("пример" :: ByteString) может сильно удивить

Aleksey
14.01.2018
10:04:38
Такой уж инстанс IsString

Artem
14.01.2018
10:19:02

Index
14.01.2018
10:34:43
https://caps-0-dxkllnpysx.now.sh/
Случайно лежит.

Nikita
14.01.2018
10:40:48
Вопрос по выбору трекера задач.
Хотелось бы (не в порядке приоритета):
- зависимости между задачами,
- спринты,
- API,
- html5 и нормальный UI,
- иметь kanban,
- добавление подзадач,
- возможность выстраивать workflow как в JIRA (блоксхема из статусов),
- интеграция с draw.io,
- быть легким (не как JIRA),
- интеграции с github,
Расскажите, кто что использует?

Alister
14.01.2018
10:41:59
Trello
Хапстаф

Nikita
14.01.2018
10:42:36
Trello не умеет многое
спринты например
workflow статусов

Alister
14.01.2018
10:44:51
Плагины есть

Julian
14.01.2018
11:53:11
Я сам не пробовал, но как легковесную Джиру мне рекомендовали - https://yandex.ru/tracker/
Он не так давно вышел из внутреннего проекта Яндекса, но амбиции имеются.

Andrei
14.01.2018
11:57:47
Вопрос по выбору трекера задач.
Хотелось бы (не в порядке приоритета):
- зависимости между задачами,
- спринты,
- API,
- html5 и нормальный UI,
- иметь kanban,
- добавление подзадач,
- возможность выстраивать workflow как в JIRA (блоксхема из статусов),
- интеграция с draw.io,
- быть легким (не как JIRA),
- интеграции с github,
Расскажите, кто что использует?
YouTrack всё умеет, только с draw.io непонятно

Google

Nick
14.01.2018
11:57:56
А youtrack тяжёлый ?
На самом деле и Jira не сильно то тяжелая

Andrei
14.01.2018
11:58:26
define «тяжёлый»?
впрочем, я необъективен — я jetbrains за проставленные tab index готов простить почти всё

Yuriy
14.01.2018
12:15:53

Nikita
14.01.2018
12:18:56
Кто нибудь пользуетя nixOS тут

Alexander
14.01.2018
12:19:51
да

Ignat
14.01.2018
12:20:52
Офк, но есть и специальный чят

Admin
ERROR: S client not available

Ignat
14.01.2018
12:21:13
@ru_nixos

Nikita
14.01.2018
12:21:48
Мне просто интересен nix package manager но я на darwin
macOS

Andrei
14.01.2018
12:22:07
nix-darwin есть

Ignat
14.01.2018
12:23:30
У меня там что-то странное происходит с обновлением каналов
Но тут собственно nix-darwin ни при чём

Mikhail
14.01.2018
15:38:44
Подскажите, а в чем оптимизация?

Yuriy
14.01.2018
15:39:59
ссылка на f не копируется на каждой итерации

Dmitry
14.01.2018
15:41:11
второй мап можно инлайнить

Mikhail
14.01.2018
15:42:00
А первый почему нельзя инлайнить? Это связанно с тем, как рекурсия компилируется в цикл?

Google

Yuriy
14.01.2018
15:42:05
рекурсия не всегда компилируется в цикл
рекурсия может компилироваться в jnz, и цикл может компилироваться в jnz

Ignat
14.01.2018
15:43:55
а конпелятор сам недостаточно умный, чтобы общий префикс аргументов зафиксировать?

Mikhail
14.01.2018
15:44:10
jnz - это jump?

Yuriy
14.01.2018
15:44:15
достаточно глупый компилятор может сказать, что первый map рекурсивный, и даже не пытаться его инлайнить до какой-то там глубины

A64m
14.01.2018
15:44:21
потому что не всегда приводит к улучшению кода.

Yuriy
14.01.2018
15:44:48

Mikhail
14.01.2018
15:44:57
if zero?

Ignat
14.01.2018
15:45:11
if not zero*

A64m
14.01.2018
15:45:35
теперь, правда, есть идея такая, делать это преобразование (оно называется STO) и если появились новые джойн пойнты, а старые не испортились - значит преобразование полезно

Yuriy
14.01.2018
15:45:37
zero или not zero — не суть. какой-то условный переход

Mikhail
14.01.2018
15:46:10

Yuriy
14.01.2018
15:47:30

Alister
14.01.2018
15:48:19
почему феминистики пишут на JS?

Yuriy
14.01.2018
15:48:45

Alister
14.01.2018
15:49:08
ну это с сайта по JS