Index
18.02.2018
18:27:56
Но не то чтобы какая-то из них была основной, а другая обратной. Они по отношению друг к другу обратные.
Для любой категории C мы можем говорить о обратной ей категории Op(C), а Op(Op(C)) = C
Поэтому если мы говорим об эндофункторах и определяем их как отображения C -> C, то дуальное понятие кофунктора это Op(C) -> Op(C). Но это по сути та же самая сущность, потому что какую категорию считать обратной, а какую основной, не важно
В случае с контрафункторами, мы имеем C -> Op(C), но это то же самое, что Op(C) -> Op(Op(C)), т.е. Op(C) -> C, по той же причине
Google
Index
18.02.2018
18:35:21
в Хаскеле
class Functor c1 c2 f where
fmap :: c1 a b -> c2 a b
и в дефолтном определении берут c1 = (->) и c2 = (->)
разворачиваем все в обратные категории, получаем
class Functor c1 c2 f where
fmap :: c1 b a -> c2 b a
что абсолютно идентично (до переименования)
поэтому функтор = кофунктор
а вот если мы только c1 или c2 развернем, то получим контрафукнтор
эндофунктор: c1 = c2, контрафунктор: c1 = op(c2)
type Op c a b = c b a
type Endofunctor c = Functor c c
type Contrafunctor c = Functor c (Op c)
если бы можно было частично применять синонимы вроде Op
Vyacheslav
18.02.2018
18:43:41
kana
18.02.2018
18:45:13
Антон
18.02.2018
18:47:08
@int_index, а контрфункторы в контексте Хаскелля чем могут быть полезны?
Index
18.02.2018
18:47:35
https://hackage.haskell.org/package/contravariant
kana
18.02.2018
18:47:45
как составная часть профункторов например
которые довольно полезны и до сих пор мозговыносящие для меня
не думаю, что смогу повторить написание призм
Google
Index
18.02.2018
18:48:34
Ну да, профунктор это бифунктор контравариантный в одном из параметров
Alexey
18.02.2018
19:14:40
Подскажите, а есть ли какие-то структуры данных типа листа или мапа по принципу мвара, где результат завернут в io?
Artyom
18.02.2018
19:17:07
stm-containers? Chan/TChan?
(ну или я не понял вопрос)
Alexey
18.02.2018
19:19:13
я сам не настоящий сварщик. хочется конкуретные коллекции, которые неблокируемые и асихронность выражена через io
Artyom
18.02.2018
19:24:45
похоже на stm-containers, да
stm в io можешь сам перевести
Alexey
18.02.2018
19:25:50
а как мне там list сделать?
а, ну видимо нужно просто в stm его запихать, да. но это просто стм. немного другой подход
Artyom
18.02.2018
19:40:33
а как мне там list сделать?
никак
это уже смотри на Chan и так далее
если твой юзкейс не ложится на stack/queue, то это либо TVar [a], либо что-то более хитрое
Alexander
18.02.2018
19:58:51
т.к. у меня есть пара предположений о том, что ты хочешь, но я не уверен, что хотя бы одно из них верное
сноймано пакет кстати был какой-то
на тему того, что хочется
Alexey
18.02.2018
20:04:36
мне нравится дизайн мвара - неблокируемый, эффект выражен через io. но мвар это всего лишь одно значение. мне хочется более сложных структур данных, например хеш таблица, у которой будет апи как у мвара - все операции которые потенциально требуют синхронизации обернуты в эффект. io подойдет.
хочется такой апи для простого и надежного конкурентного программирования
Антон
18.02.2018
20:05:41
STM, не?
Alexander
18.02.2018
20:07:43
https://hackage.haskell.org/package/hashtables
вот мутабельные хэштейблы
но stm гораздо лучше для конкурентности в большинстве случаев
Google
Alexander
18.02.2018
20:08:48
если синхронизация coarce grained, то MVar (HashTable a b) достаточно
если finegrained надо, то да сложнее, но в stm-containers смотреть или самому делать
Artyom
18.02.2018
20:09:27
я вот вообще не осиляю понять, что такое "обернуты в эффект"
как у любой мутабельной структуры (хоть конкуррентной, хоть нет) операции могут быть *не* обернуты в эффект?
Alexander
18.02.2018
20:09:45
не пытайся понять
(вообще имеют тип -> m wtf)
Alexey
18.02.2018
20:10:34
спасибо, почитаю.
Alexander
18.02.2018
20:11:28
finegrained таблиц я не видел, у Ryan Newton вроде были всякие работы по lockfree структурам
там может было что
обычно хватает coarse grained
вроде ж так пишется?
в общем когда на всю структуру лок
типа MVar T/ TVar T
и вперед
Alexey
18.02.2018
20:13:00
Это совсем наивная же реалзиация, да? https://hackage.haskell.org/package/hashtables-1.2.2.1/docs/src/Data-HashTable-IO.html#insert
давайте просто заврапим все в ИО не глядя.
Alexander
18.02.2018
20:13:12
не наивная
но там локов нету
Artyom
18.02.2018
20:13:41
Alexander
18.02.2018
20:13:41
емнип
там - да
но там вроде хэштаблиц не было
Google
Alexander
18.02.2018
20:14:00
?
я вообще стараюсь держаться подальше от пакетов Никиты, они клевые местами, особенно hasql, но настолько упоротые по апи и реализации бывают
Alexey
18.02.2018
20:14:35
да, но вместо того чтобы обезопасить только один бакет мы просто защищаем весь инсерт.
ладно, похоже я хочу странного
Artyom
18.02.2018
20:15:04
Alexander
18.02.2018
20:15:05
не, не странного
вон говорят в stm-containers все есть
Alexey
18.02.2018
20:16:26
вот есть в джаве concurrent hashmap. в нем минимум блокировок и синхронизаций. он быстрый и классный. есть мвар, в котором в сигнатуре io. хочется вот такую же :)
да, я покопаю стм пакет из хаскелла в деталях
Admin
Alexander
18.02.2018
20:17:11
stm-containers же!
Alexey
18.02.2018
20:17:13
я вообще на скале программирую, но там такого не нашел. только мвар. думал может у вас есть. )
Artyom
18.02.2018
20:17:25
stm-containers у нас есть
Alexey
18.02.2018
20:19:02
ок. буду читать
Alexander
18.02.2018
20:19:07
хотя покопать stm чтобы понять что это такое тоже полезно
просто решение задачи в другом пакете
Alexey
18.02.2018
20:21:54
что такое стм я знаю. интересно посмотреть конкретную реализацию в хаскелле
этот стм это стандартный пакет? или от сообщества?
я имею ввиду это дефолтный путь или дефолтного нет?
Alexander
18.02.2018
20:22:39
стандартные
Google
Alexey
18.02.2018
20:22:42
ок
Alexander
18.02.2018
20:22:47
что такое дефолтный путь?
если что родина stm это здесь
вроде нету ни одного другого языка где есть адекватный stm
вообще в идрисах и т.п. можно наверное
Alexey
18.02.2018
20:25:09
что такое дефолтный путь?
ну вот например в скале не дефолтного решения для работы с json. есть несколько либ в сообществе, но нет стандарта де факто. у каждой есть + и -
Alexander
18.02.2018
20:25:11
к stm в железе не относится
ну тут пакет идёт с ghc
Alexey
18.02.2018
20:25:54
ок
Alexander
18.02.2018
20:26:09
там в любом случае все интересное в rts должно быть
Imants
18.02.2018
20:34:46
Вот примерчик из компаньона к Parallel & Concurrent H. S. Marlow:
https://github.com/simonmar/parconc-examples/blob/master/TList.hs
Подойдёт?
Alexey
18.02.2018
20:45:22
почитаю
спасибо
Mikhail
18.02.2018
22:53:11
Технически, можно сделать zip... господи
offsets :: [ASMLine] -> [ASMLine]
backOffsets [] = []
backOffsets (a:as) = a {offset = length (concatMap bytecode (a:as))}: backOffsets as
offsets = reverse . backOffsets . reverse
Сделал
всего и делов-то было
Pig
18.02.2018
23:27:06
Alexander
19.02.2018
08:39:11
Liquid Haskell
Александр
19.02.2018
08:54:39
Кстати, любопытно. А в чем состоит "адекватность" STM? Какие критерии? Код должен проходить какие-нибудь стандартные тесты? Удовлетворять определенным требованиям?
Leonid
19.02.2018
08:58:25
Пишешь левой ногой, и почти всегда работает как хотелось
Александр
19.02.2018
08:59:29
Кложуристы, вроде, тоже были рады своему STM. Вероятно, они даже скажут, что там он раньше появился (но это неточно)
Leonid
19.02.2018
09:00:50
Фпрог спб сменил место проведения