Чтобы добавлять сообщения и комментарии, .

@ndtimofeev:
ndtimofeev

Мальчики Никита и Серёжа пишут приложение. Гуйня на WX, а бэкенд на хаскеле. Вопрос в том как из треда на хаскеле передать сообщение в тред на крестах так, чтобы не 1) блокировать эвентлуп крестофреймворка, 2) полить из крестов MVar 3) unix-сокет.

@qnikst:
qnikst

/path/blablabla/foobar.hs:332:58: error:
• Couldn't match expected type ‘BlahBlah’ with actual type ‘t’
‘t’ is untouchable
inside the constraints: reply ~ BlahBlah
bound by a pattern with constructor:

а какая ошибка больше всего бесит вас?

@segfault:
segfault

pbs.twimg.com
Wow! Not bad ...

@rufuse:
rufuse

а есть для сабжа нормальные(компилятся из литералов, работают с Text) регулярки, чтобы как hackage.haskell.org но не зависели бы от сишных либ?

@qrilka:
qrilka

уже GHC 8.2 на носу, а GHCJS всё ещё не может обрести поддержку 8.0.2 со стаком

@rufuse:
rufuse

Можно ли на сабже заиметь type-directed search населяющих типы-синглтоны термов как-нибудь? В голову приходит библиотека constraints, т.к. это пруф-серч по сути, но дальше мысль не идет.

@ndtimofeev:
ndtimofeev

А зачем parseJSON завёрнут в Parser от attoparsec? В этом же решительно никакого смысла: Value за тебя уже попарсили и отдают аргументом, ничего полезного внутри монады ты уже сделать не можешь, отстрелить ногу — запросто. Что вообще происходит?

@qnikst:
qnikst

github.com

знал ведь наверное, но забыл

@qnikst:
qnikst

зачем и когда нужно пользоваться asyncExceptionFromException?

@qnikst:
qnikst

А кто-нить активно пользовался service pattern

@qnikst:
qnikst

В есть например у меня

newtype Foo m a = Foo { runFoo :: ReaderT Q m a }

он является MonadTrans и в нём легко лифтить все вещи. Но при этом реально в проекте используется

type FooM a = Foo ConcreteMonad a

чтобы выполнять действия ConcreteMonad я могу воспользоваться lift. Все нормально, но при этом создание полиморфного стека немного напрягает, т.к. огорчает inliner. А если я
сделаю

newtype FooM a = FooM { runFooM :: ReaderT Q ConcreteMonad a }

то уже у меня не будет lift и или придётся воодить класс для действий ConcreteMonad или делать liftConcreteMonad, а и то и то печально, что делать-то?

@ndtimofeev:
ndtimofeev

А threadWaitWrite работает с Fd чтобы намекнуть что для винды не имплементировано? Или просто из ненависти к человечеству как threadDelay с Int'ом?

@provaton:
provaton

Ок, раз #2870836/4, то вместо гугла буду спрашивать сюда.

Написал я парсер yaml'а, примерно как вот этот — github.com


Как лучше всего реализовать необязательные ключи? Чтоб при отсутствии определенных элементов использовалось некое дефолтное значение?

@max630:
max630

reddit.com

@provaton:
provaton

Что-то опять зачесались руки попробовать на хаскелле пописать. И задача как раз есть умеренной сложности. Но знаю, что ведь тупой слишком, и только зря время потеряю, но все равно хочется...

@qnikst:
qnikst

а по какому принципу на stepic винды решения людей, а то например на haskell, там вечно какие-то 6 рандомных решений с пафосными комментариями, учитывая, что всего проходит человек 100.

@killy:
killy

hell yeah

Челледж "Завершить курс на 100%, чтобы можно было с чистой совестью сказать, что он говно" — выполнен.

Но я скажу мягче: курс сырой и несбалансированный. Неудачный формат изложения и множество методических просчётов.

Рад только за тех, кто пришёл задачки порешать. Должно быть неплохо для освежить в голове некоторые темы.

@agr:
agr

github.com
nstack тоже набирает.. (всё больше и больше стэков)
Посмотрел на их концепцию. Переусложнена, для ETL процессов можно и нужно сделать проще. ETL/IO знает, как.

@thefish:
thefish

"Стой, погоди" — прерывает Крис. "А разве не… разве не надо здесь декларацию типа? Ну хотя бы для функций?"
Ты мило улыбаешься. "Хаскель динамически типизированный, интерпретируемый язык".
Крис выглядит так, как будто проглотил лягушку.
"Смотри, я покажу. Давай проверим, равняется ли один одному."

habrahabr.ru

@qnikst:
qnikst

@blaze если инстанс может быть написан, то он должен быть написан, иначе будет куча неумных людей людей и напишут кривой инстанс.

Если логичный инстанс единственный, то тогда вообще не должно быть никаких вопросов, как например для `(,) а`.

@qnikst:
qnikst

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

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

@qnikst:
qnikst

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

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

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

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

@ndtimofeev:
ndtimofeev

А почему find ищет через Foldable, а lookup — через список?

@ndtimofeev:
ndtimofeev

Ну и коль скоро сегодня меня волнуют только извращения: можно ли из STM транзакции сделать atomicModifyIORef и расчитывать что его в самый неподходящий момент не прибьёт retry?

@ndtimofeev:
ndtimofeev

hackage.haskell.org — обартите внимание на инстанс в Monad: это вообще практически осмысленно или просто очень хотелось чтобы Monad?

@ndtimofeev:
ndtimofeev

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

@agr:
agr

завтра будет митап на испанском про Haskell.. впишусь в последний вечер пребывания здесь.

@segfault:
segfault

Есть ленивый список значений `list :: [Maybe a]` в котором элементы не зависят друг от друга по данным. Есть функция `findGrail :: [Maybe a] -> b` которая внутри делает `foldl . catMaybes'` . Хочу получить `b` так, чтобы элементы `Maybe a` исходного списка `list` вычислялись параллельно в разных потоках на всех доступных ядрах автоматически. Как максимально просто по-бомжвею это сделать?

@agr:
agr

[email protected], el respeto, как говорят у нас в Эквадоре!

с xlsx собрал тулу, которая вынимает аттачи, single cells и merged cells (оказалось достаточно левый верхний угол из диапазона подать на вход, т.е. то же самое, что и single cells).

@killy:
killy

Prelude> a = 10
Prelude> odd a
False
Prelude> a = 10; odd a

<interactive>:78:9: error:
Parse error: naked expression at top level
Perhaps you intended to use TemplateHaskell

Как присвоить значения и вызвать использующую их функцию в одной строке в GHCi?

@agr:
agr

opennet.ru

связанных с языком Haskell
на основании публикации в форуме sysadmins.ru призывов к массовым беспорядкам

сегодня держишь ноду тора, завтра коммитишь в репу дебиана, послезавтра пишешь на хаскеле, а к концу недели — тюрьма!

@Strephil:
Strephil

Там вторая часть по хаселлю. Чё-то как-то не очень.
Для меня это как головоломки :-( бессмысленное жонглирование типами :-(

@agr:
agr

Дошло дело и до xlsx. В рамках Эквадора, конечно.
Тут и merged cells, и аттачи-картинки.

Привет, @qrilka!

Кодом поделиться, боюсь, не выйдет. Но опыт кой-какой будет извлечен из парсинга.

@blaze:
blaze

aphyr.com

@blaze:
blaze

и тут зоркий глаз обнаружил, что автор dbus есть на github и даже вытащил туда исходники проекта. Но все равно на всех там болт положил, так что не зря я проект перехватил.

@gbdj:
gbdj

As everyone knows :-) monads are just monoids in the category of endofunctors.

@gbdj:
gbdj

Считаю что данная конструкция прекрасна в своей лаконичности и "простоте" =)
fmap (>>= f) aНадо видеть каким чеширским котом медленно расплывалась моя лыба когда я впервые увидел это

@agr:
agr

opennet.ru
опеннет — такой опеннет

@blaze:
blaze

Achievement unlocked: package takeover. Теперь надо найти время сделать с ним что-нибудь хорошее и доброе, например перетащить на github.

@qnikst:
qnikst


Note [Instantiating stupid theta]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Normally, when we infer the type of an Id, we don't instantiate,
because we wish to allow for visible type application later on.
But if a datacon has a stupid theta, we're a bit stuck. We need
to emit the stupid theta constraints with instantiated types. It's
difficult to defer this to the lazy instantiation, because a stupid
theta has no spot to put it in a type. So we just instantiate eagerly
in this case. Thus, users cannot use visible type application with
a data constructor sporting a stupid theta. I won't feel so bad for
the users that complain.