to post messages and comments.

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

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

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