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

@segfault:
segfault

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

@agr:
agr

¡@qrilka, 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.

@ndtimofeev:
ndtimofeev

При компиляции проекта с помощью cabal build на отдельном файле ghc виснет и постепенно подъедает всю системную память пока не встретит свой OOM. При использовании cabal repl всё отрабатывает нормально. Сотен конструкторов и километров паттернов в проблемном исходнике не обнаружено. И времени чтобы колупаться в том на чём наелся компилятор тоже нет. День обещает быть восхитительным. ghc-8.0.2 на linux если что.

@qnikst:
qnikst

А как написать:

xz <- many (readTChan x)
for_ xz writeTChan

так чтобы промежуточная струтура не строилась?

(forever $ readTChan x >>= writeTChan x) <|> alwaysSucceeds

@max630:
max630

вот нахуя было неймспейсы в иерархию отображать? это теперь при любом рефакторинге двигать файлы.

@agr:
agr

opensource.google.com
им ещё выпиливать и выпиливать сабж из своих недр..

@qnikst:
qnikst

```
data State a = Running a | Starting (STM a) | Stopping (STM ())
```
и TVar (HashMap key (State value)), лучше ведь чем global lock на структуру?

@Shchvova:
Shchvova

Тут на степике начнется через неделю Haskell часть 2
Есть заинтересованные?

@ndtimofeev:
ndtimofeev

Можно уговорить QuickCheck генерировать один из аргументов функции-свойства не каждый тест, а раз в 10-100 циклов?

@ndtimofeev:
ndtimofeev

А паттерн-синонимы действительно не могут быть рекурсивными? В смысле иметь сигнатуру вида pattern Pat :: a -> T -> T? А как так вышло и как с этим жить?

@blaze:
blaze

медведи мрут как мухи. То haskellcast новый вышел, то вот бананы и линзы ожили.

@ndtimofeev:
ndtimofeev

Я правильно понимаю что show для ByteString не экранирует \n?

@qrilka:
qrilka

теперь systemd и в хачкеле — seas.upenn.edu (хотя по идее это System D)

@qnikst:
qnikst

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

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

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

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

@agr:
agr

теперь и в ИТМО. github.com

@ndtimofeev:
ndtimofeev

tab.snarc.org

@ndtimofeev:
ndtimofeev

В пакетном менеджере Cargo реализована команда "cargo check", при указании которой компилятором выполняются все совершаемые при сборке проверки кода, но пропускаются достаточно ресурсоёмкие стадии, связанные с генерацией исполняемых файлов. Для некоторых проектов "cargo check" может выполняться в несколько раз быстрее обычной сборки, что позволяет значительно сэкономить время разработчика при выполнении тестовых пересборок, обычно используемые в процессе разработки чтобы убедиться, что добавленный код компилируется; Хм… А ghc умеет в то чтобы натравить на исходник тайп-чекер и не генерить ничего?

@blaze:
blaze

Achievement unlocked: попытаться отобрать себе пакет на hackage.

@ndtimofeev:
ndtimofeev

Есть набор команд для устройства. Все команды по разному сериализуются и могут иметь свой собственный тип ответа. Требуется сформировать очередь из этих команд (вернее из пары команда — TMVar c типом ответа на команду) внутри remote-монады, затем переупаковать эту очередь и отослать в мир. Проблема в том, что я никак не придумаю как бы мне описать команды так чтобы можно было осуществлять более-менее нормальный паттерн-матчинг для очереди.

@qnikst:
qnikst

а можно ли написать:
```
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 такой если что

@qnikst:
qnikst

хочу 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), который совсем похожий. В итоге было бы круто если бы такие бредовые типы можно было локализировать в функции. Кого позвать?

@qnikst:
qnikst

decodeAnyResource :: forall p t f . Typeable f
=> Proxy (p :: * -> Constraint)
-> Proxy t
-> (f -> A p)
-> (UUID -> String)
-> (forall a . p a => a -> t)
-> RemoteTable
-> ByteString
-> t


давно такой радости не писал, ну хоть чуть весело.

@rufuse:
rufuse

А есть ли какие-то флаги для GHC RTS кроме -H, которые могут повлиять на то, при какой занятости кучи врубается GC? -H поднимает минимальную планку, которая suggest'ится в RTS, а свипы все равно срабатывают на 30% загрузке емнип. Хотелось бы флажок, который бы оверрайдил эти 30%, а не потенциально блоатил кучу.

@ndtimofeev:
ndtimofeev

import Data.Proxy
import Data.Kind

type family Saturate (f :: k) (v :: a) :: Type where
    Saturate (f :: a -> Type) v = f v
    Saturate (f :: a -> k)    v = Saturate (f v) v

data Select f = Select (forall a. Saturate f a -> a)

sel :: Proxy f -> (forall a. Saturate f a -> a) -> Select f
sel _ = Select

data T a b c = T { x :: a, y :: b, z :: c }

Есть такой кусочек кода. Всё как всегда:
Select x — реджектится компилятором (без явной аннотации типа) потому что из Saturate f a нельзя вывести f.
sel x — работает, но таскать Proxy (или явную аппликацию типа) не хочется.
Есть шанс сделать красиво?

@qnikst:
qnikst

blog.tweag.io

линейные типы всем даром, пусть никто не уйдет обиженным

@qnikst:
qnikst

где научиться писать композабельный и реюзабельный TH?
почему люди пишут функции на Name, а не TypeQ там где нужно тип передать?
и многие другие вопросы про TH где почитать?

@ndtimofeev:
ndtimofeev

А зачем в мире победившего FTP нужны F-алгебры?

@rufuse:
rufuse

Емнип есть часть флажков, которые играют в кабале только для executable таргетов(вроде -threaded). Можно ли где-то список посмотреть/узнать?

@rufuse:
rufuse

Коллективный разум, помоги отдебажить: тестировал приложение яндекс-танком(нагрузочная тестилка такая), обнаружился странный момент — если дать постоянную нагрузку без "простоев", то приложение в какой-то момент перестает отвечать за разумное время(я в танке жду 60с и это совсем неприемлимо, в нормальном режиме за 10-15 отстреливает), как будто у него внутри локи какие-то, а проц до конца даже и не догружает. GC сейчас гляну(пока компилит), но вообще не очень понятно куда и как копать.