@haskellru

Страница 853 из 1551
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
type Op c a b = c b a type Endofunctor c = Functor c c type Contrafunctor c = Functor c (Op c) если бы можно было частично применять синонимы вроде Op
ну вот собственно я и имел в виду, что контрфунктор - унарный термин, как и эндофунктор такая формализация (хоть на хаскеле) помогает четче выразить мысль

Антон
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
finegrained таблиц я не видел, у Ryan Newton вроде были всякие работы по lockfree структурам
так а разве stm-containers не fine-grained? я всю жизнь думал, что да

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
но там вроде хэштаблиц не было
> A hash table, based on an STM-specialized hash array mapped trie.

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

Сделал

всего и делов-то было

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
Фпрог спб сменил место проведения

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