to post messages and comments.

Есть
data Foo =
A1 :: forall x . TVar (Either E x) -> ...
A2 :: forall x . TVar (Either E x) -> ...
...

во всех конструкторах есть Either E, у меня есть метод который процессит это Foo, каким бы образом вытащить из него tvar так чтобы туда можно было положить Left E, и не важно какой там x?

Кто-то ведь уже делал тут такую штуку?
есть GADT вида:

data Foo reply where
C1 :: Param1 -> Param2 -> Foo Reply1
C2 :: Param2 -> Param1 -> Foo Reply2
...

есть фунции вида:
handleC1 :: Param1 -> Param2 -> IO Reply1

хочется как-то подешевле в терминах бойлерплейта прицепить эти хэндлеры к C1? Ещё было бы прикольно подешевле их вызывать. Как?

хочется написать что-то вроде:

class T a where type ReqRep a :: -> ; reqrep :: a -> ReqRep a x -> x

для того, чтобы можно было передавать запросы гадтами, которые типизированы возвращаемым результатом. Но при этом я теряю возможность сдеать простые классы, где запрос это Int а релзультат всегда Bool анпример.

Как сделать, чтобы и то и другое работало и запрос не надо бы было паковать в гадт?

а можно ли написать:
```
data Q = Q (forall a . TChan (Request a, TMVar (Reply a)) }
Foo { foo :: Q }
runQ :: Foo -> Request a -> IO (Reply a)
runQ f = case foo f of
Q t = do v <- newEmptyTMVarIO
atomically $ writeTChan t (x,v)
atomically $ takeMVar v
```
и не свести GHC с ума? и не получить unsafeCoerce, Request a это GADT такой если что

хочу local data в haskell вот в посте выше у меня был тип A

data A (c :: * -> Constraint) = forall a . SafeCopy a => A (Dict (c a))

смысла в нём никакого, т.е. просто протаскиваем словарик для экзестенциального типа,
плюс ещё констреинт фиксируется, используется в самой функции, а так же у вызывающего эту функцию, например:

(\(SomeResourceDict (Dict :: Dict (Resource a))) -> A (Dict :: Dict (Resource a)))

Рядом мне нужно сделать data A3 (c :: -> -> * -> Constraint), который совсем похожий. В итоге было бы круто если бы такие бредовые типы можно было локализировать в функции. Кого позвать?

Использование ранк 2 тайпс для защиты ресурсов знакомо всем, но мне хочется идти дальше, мне нужно внутри rank2 уметь инвалидировать ранее созданные в этом ранк 2 ресурсы. Т.е.
```
x <- allocate
use x
foo
Тут x использовать уже нельзя
```
Один вариант это сделать foo CPS но это муторно и будет плохо работать в циклах, есть еще варианты? Indexed Monad взлетит?

Есть программа (RTS), которая может создавать треды в разные странные моменты обычным pthread_create . Есть специальный superduper_thread_create, который создает нужные мне треды, но взять и перевести на него RTS неполучится (лень). Так же есть так же специальный метод, который позволяет конвертировать обычный posix тред в superduper тред.

Вопрос, есть ли какие-либо средства для автоматизации вызова функции конвертации треда в специальный после вызова pthread_create

У меня есть два рефакторинга
1. Было перемещено много файлов в разные каталоги, много из перемещённых файлов еще и редактировались.
2. Массивных перемещений не было, но было много правок в существующих файлах, некоторые файлы были удалены, некоторые созданы
Хочу эти два рефакторинга смержить. Если конкретно, то хочу сказать гиту, что путь A теперь соответстует пути B, путь C соответствует пути D и так далее. Т.е. рефакторинг 2 произвести над теми же файлами в новых путях рефакторинга 1. Нечто вроде git merge -s recursive -X subtree=path но расширенное.

Вот у меня есть фукнция сделать что-то с сервисом, поидее можно по ноде определить сервис, или по хосту определить её в итоге получаются функции:

doSmth :: Service S -> a -> Process b
doSmthOnNode :: Node -> a -> Process b
doSmthOnAnyNode :: Host -> a -> Proces b

Выглядит это печально, и что делать с этим непонятно, или городить на пустом месте класс типов CanDoSmth с инстансами для Service Node Host, или делать ADT в котором будет Service | Node | Host, или что-то ещё, например 100500 странсформеров..

Причем это простой случай, в более сложном у меня есть функция в процессе вычисления, например берущая что-то из базы, при этом иногда хочется ей дать подсказку и передать данные, например они у меня уже есть и акутальные.

В общем есть хороший вариант передачи "подсказок"

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

Есть дерево "T" , представляющее из себя выражине типа Bool, узлы дерева — логические операторы (and, or, xor, полный перечень зависит от решения), а листья — произвольные логические выражения. Все листья дерева помечены краской. Каждый лист в дереве считать уникальным. Задача: разбить дерево на несколько деревьев, в каждом из которых будут листья одинакового цвета, при этом, должно соблюдаться "(and T1 T2 T3 ...) == T", где T1, T2 — деревья с листьями одного цвета, для любых значений листьев. Листья нельзя выкидывать или использовать повторно в других деревьях, то есть, количество листьев в T должно быть равно сумме листьев в T1, T2 ...

Это случайно не какая-нибудь типовая задачка? Еще небось и библиотечка на хакадже есть?

а вот реально ли в systemd сделать сервис с вычисляемым статусом, т.е. у меня есть сервис A и зависящий one-shot сервис B, который модифицирует состояние сервиса A. Этот B нужен при первом запуске для конфигурации, в дальнейшем A, будет устанавливать свой стейт правильно, при этом хотелось бы systemd командами видеть, что включено состояние устанавливаемое сервисом B. Это вообще реально?

Вот есть задача составления расписания с ограничениями, это типичная задача для пролога, классы типов в haskell это prolog-like программирование. Вопрос можно ли решить задачу с составлением расписания чисто на уровне типов в haskell, и какие есть ограничения на задачу, которую можно решить?

Есть приложение с кучей тредов, которые ждут IO делают IO и ждут таймеров, так вот хотелось бы чтобы тот, кто ждёт таймера был бы с большим приоритетом, т.к. сейчас получается что при heavy CPU bound тасках задержка между временем когда таймер сработает и переключением может пройти слишком много времени.
Какие идеи в т.ч. паранормальные есть?

есть баш скрипт, который при всем том, что делает создает кучу переменных окружения, я хочу их получить после его выхода, как?
запускать через `. my-script.sh`? а можно ли при этом ещё простым образом вернуться к предыдущему состояниб окружения до `. my-script.sh`?

задача.. у меня есть глобальная IORef, пара специальных ядерных потоков, и код, который может хотеть значение в IORef использовать, а может не хотеть. Нужно сделать так, чтобы значение в IORef инициализировалось только если оно кому-нить нужно. (это просто unsafePerformIO initialize).
Дальше сложно, инициализация может проводиться только в ядерном потоке. Соотвественно initКернелПоток $ do initializeЗначение ; программа дальше
работает, но ровно до тех пор пока есть ядерный модуль, иначе все плохо. Вот как бы написать так, чтобы при пинании значения из любого треда оно бы инициализировалось в ядерном.

P.S. пока я писал это я придумал нормальное решение, которое проще и всех устраивает ,но как сделать то, что выше все равно интересно

Дано: проект (2шт) ну или их кабал файлы, внешний скрипт, который будет запускаться runhaskell (ну или даже пусть executable в одном из пакетов), хочется в скрипте собрать все определенные инстансы.
В принципе это вполне можно сделать если заимпортировать инстансы из всех модулей. Вопрос, как это сделать?
(ну или может можно распарсить .hi файлы, но тогда вопрос чем это сделать просто)

хочу шел, который умеет модифицировать вывод программ о которых он знает, например при запуске the silver searcher, модифицировать все показанные строки в ссылки на вызов vim +number file. Есть что существующее, и куда копать?

а какие есть "дешевые" по ресурсам CI системы или как их писать, чтобы легко интегрировать с github? А то у меня висят пара дешевых инстансов на DO, на которых только quassel не жручий, и не охота лишние деньги circleCI платить (цена вполне сравнима).

есть rest сервис, на котором используются несколько подсервисов (общение с хитрым демоно, общение с докером и т.п.). Хочется сделать страничку status, на которой в human readable form был бы результат self check этих сервисов. При этом идеально было бы сделать это так, чтобы при добавлении новых проверок и новых сервисов мне бы нужно было модифицировать минимум кода. Куда копать и какие best practices тут имеются?
Я так понимаю, что минимум кода при модификации это только если TH делать создавать свой класс и собирать инстансы в Main или есть ещё что хорошее?