Alexander
это он под меня! у него раньше другая борода была!!
Donat
у него кружечка прям как у меня, хм
Donat
а кто это?
Leonid 🦇
Дункан
Alexander
dcoutts
Alexander
хотя вот под его манеру отвечать на haskell-ные вопросы я пытался косить. но у меня не получается
Alexander
нужно ещё и умным быть
kosc
Ты же, говорят, в генте Haskell поддерживаешь, не?
kosc
Хотя, там больше portage по идее надо знать.
kosc
Не увидел тут угрозы.
kosc
Не понял шутёху.
Donat
@hotkosc загляни на #gentoo-haskell на freenode
kosc
Ого, какое есть.
kosc
39 человеков
kosc
Это прямо
kosc
\ (НИЧОСИ) /
Alexander
там есть siarheit/slyfox он активно меинтейнит
kosc
Ясно-понятно.
kosc
Но ты тот самый персонаж из Гатчины или нет?
Kirill
персонаж народного фольклорра
Alexander
да, я тот персоонаж
Alexander
могу туда тоже зайти, мне все просто лень квассель сервер включить
leon
Пожалуй начну задавать вопросы. Есть такой код: import Data.Singletons.Prelude data Doc (t :: Symbol) (poss :: [Symbol]) data Pos (t :: Symbol) data BR (docs :: [Symbol]) (poss :: [Symbol]) BR - это правила учета Pos - позиции (t - тип позиции) Doc - документы (t - тип документа) т.е. BR задаются списком позиций и списком документов. В свою очередь, документы состоят из списка позиций. Позиции одного типа могут входить в разные документы. Так вот, вопрос. Как правильней/проще задать ограничение, что если в BR задали список позиций, то в документах могут быть указаны позиции из этого списка?
Alexander
data BR (docs::[Symbol]) (pass::[Symbol] where BR :: (True ~ Subset docs pass) => .... ?
Alexander
type Family Subset a b where Subset [] b = 'True Subset (a:as) b = AND (Exists a b) (Subset as b) Subset _ _ = 'False
Alexander
в singletons наверняка уже есть
Alexander
например так можно
Denis
тайп фемили там такой нет, т.к. в прелюдии нет
Alexander
можно ещё sAll, sAny и equals написать с prelude list
Denis
можно
leon
Попутно вопрос для лучшего понимания. Когда описываю документ, я задаю только тип, и этот тип не имеет значений (не указываю конструкторы). А в предложенном варианте, задается уже и тип и конструкторы. Вот и вопрос. Это в принципе только так можно сделать? Или так просто проще?
Alexander
типофамилии дешево и сердито, но больше чем проверка при сборке врятли работать будет
Alexander
ну констреинты можно уже только с конструкторами хранить. вообще можно и вне, но это путь к багам и проблемам
leon
понял
Alexander
чисто с типами такое выразить хз как
Alexander
я сейчас тупые вопросы по серванту задавать буду
Alexander
как там multipart данные разбирать в теле?
Alexander
Servant.Multipart?
Alexander
разобрался
kake
смотрю видео на ютубе
kake
и грущу
kake
это потому что у меня нет работы?
kosc
Я перестал грустить, когда упорно начал Haskell учить.
kosc
Грустить стало тупо некогда.
kake
блин
kake
ты прав
Aleksei (astynax)
Ещё можно пробовать учить других. Как минимум, придётся заморочиться домашними заданиями и заставлять себя прорешивать оные заранее (чтобы в грязь лицом не ударить) :)
kake
да.типа ответственность ещё
PsyDebug
Видосов с прошедшей конфы ещё небыло?
Aleksei (astynax)
Даже тут писали - через две недели. Одна прошла, одна осталась :)
Viacheslav
привет, я про опять с вопросами про логгирование
Viacheslav
у меня в программе куча тредов (и соотв вызовов функции forkIO), и все логгирование, которое работает через монады/монадтрансформеры в этом месте ломается
Viacheslav
что делать?
Андрей
Не ломать)
Alexander
описать проблему точнек
Viacheslav
forkIO хочет себе на вход IO ()
Viacheslav
а если у меня есть где-то внутри вызовл логгера, то IO () -> превращается в, например, LoggingT IO ()
Viacheslav
и соотв непонятно как это запихать внутрь форка, разве что каждый раз отдельно создавать этот контекст, но тогда не особо понятно насколько это круто работать будет с записью в файл (они же друг о друге ничего не знают), либо как-то этот контекст цеплять и потом явно передавать внутрь форка
Vasiliy
forkIO вообще лучше не использовать
Vasiliy
вместо него есть async
Vasiliy
а LoggingT - это который из monad-logger?
Viacheslav
ну он до фига откуда
Viacheslav
вместо него есть async
вот это ценное замечание
Vasiliy
у него есть инстанс MonadBaseControl, так что он сочетается с lifted-async
Viacheslav
видимо это было недостающее звено
Viacheslav
спасибо
Vasiliy
касательно записи в файл из нескольких тредов - либо руками синхронизировать, либо использовать библиотеку, которая решает эту проблему
Vasiliy
там под капотом у LoggingT, по-моему, fast-logger, можно глянуть в документации, сериализует ли он запись в файл
timothy
>Almost totally rewritten lmdb API library, that provides zero-copy interface. State of the existing LMDB libraries is quite poor. You are open to get additional copies, segfaults and problems of any kind. а tweag не сделал ее открытой?
timothy
@qnikst
Alexander
т.к. это звучит как я пишу на си, у меня сложная программа корутины всякие и логировование ломается
Alexander
вот и угадывай что там не так
Viacheslav
ключевое в описание было forkIO, но ниже я кажется достаточно подробно изложил проблему и мне помогли)
Alexander
я попробую на праздниках запилить
Alexander
lifted-async, lifted-base, или нижележащий monad-control или monad-unlift да это ответ
Alexander
вообще факт того, можно ли их использовать зависит от реализации монадки/стека