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

@khorser:
khorser

В исходниках часто встречается замечательная конструкция.
runST st = runSTRep (case st of { ST st_rep -> st_rep })
Интересно, почему не используется явный матчинг. Кто виноват?Примитивный язык, использующийся для бутстрапа, привычка или есть секретные ништяки за использование таких конструкций?

@khorser:
khorser

Долго выдумывал, как бы идиоматично скомбинировать функции, возвращающие Either, чтобы получить или Right первого успеха, или Left из всех ошибок, если ни одна функция не сработала. Чутьё не обмануло: Эдик Кметт таким образов определил <|> у Alternative для EitherT: hackage.haskell.org

@khorser:
khorser

Вот есть у меня биндинги к некоей С++ либе. Из-за строк, указателей и состояния библиотеки в сигнатурах появляется IO. Настоящего I/O нет, поэтому хочется всё завернуть в свою не-IO монаду, которая сделает unsafePerformIO и обеспечит правильную последовательность вызовов посредством Reader или State. Гугл говорит, что подход не уникален и я не одинок: stackoverflow.com Но как-то настораживает отсутствие комментариев к ответу, который дал сам же спросивший. У кого-нибудь есть мысли?

@khorser:
khorser

Теперь "hoogle convert" не только не хуже "hoogle data", но и даже более гибуче: можно конвертировать .txt файлы именно нужной версии и ссылаться на правильную локальную документацию: github.com

@khorser:
khorser

Из любопытства и любви к искусству сделал AUR пакет для гитовского cabal-install. Чтобы избежать проблем, оно компиляется прямо по месту и даже бинарник называется cabal-git: aur.archlinux.org