Задача из #A6RBIH сводится к следующему вопросу: можно ли заставить компилятор преобразовывать ; в `>>=`, а не `>>`? Тогда в do notation можно будет записывать такой себе dataflow: do { return 1; return . (+1); print }. Сейчас это можно сделать, только введя явные названия для аргументов: do { s <- return 1; s' <- return (s+1); print s' }
С обычной записью, конечно же, никаких проблем: return 1 >>= return . (+1) >>= print
Можно ли написать свою do notation, не меняя код компилятора, и если да, то как?
Например, в главе 10 RWH[1] мы пишем такой код:
```
arseP5_take2 s =
matchHeader (L8.pack "P5") s >>?
\s -> skipSpace ((), s) >>?
(getNat . snd) >>?
skipSpace >>?
\(width, s) -> getNat s >>?
skipSpace >>?
\(height, s) -> getNat s >>?
\(maxGrey, s) -> getBytes 1 s >>?
(getBytes (width * height) . snd) >>?
\(bitmap, s) -> Just (Greymap width height maxGrey bitmap, s)
```
Было бы круто, если бы программист мог определить собственную do notation и избавиться от комбинатора `>>?` (спрятав его за преобразованиями, как это делается для >> в монадах). Это возможно?
1. http://book.realworldhaskell.org/read/co.....ormat.html
В продолжение #B8RA6T. Посмотрел strace, оказалось, что хаскелевый рантайм запускает таймер, который раз в секунду организует SIGVTALRM (для переключения тхредов, как я понял). select(2) в шоке от такой хуйни вываливается с EINTR. Лечится -with-rtsopts=-V0 при компиляции (отрубает все таймеры нахуй).
Написал автору враппера, обещал починить, и починил. Переколбасив, правда, заодно апи.
Переписываю xbattbar (http://iplab.aist-nara.ac.jp/member/sugu.....ttbar.html) на хаскеле.
Оказывается, вполне можно писать ничего не зная про моноиды в категориях эндофункторов.
Такая няшная сишка получается, без объявления типов переменных. Весело.
>Никогда не думал, что освою конструирование комбинатора неподвижной точки из катаморфизма неподвижной точки единичного функтора.
http://nponeccop.livejournal.com/289076.html
У меня батхёрт.
http://www.reddit.com/r/haskell/comments.....biks_cube/ — помогите уже человеку обобщить идею на кубики с n² квадратами на каждой стороне, а то я рехнусь скоро — у меня была идея, но я никак не могу довести её до ума (постоянно получаю <<loop>>).
/Шаг за пределы хаскеля - и все, туши свет, "не вижу, не слышу, не знаю и знать не хочу"./
http://xeno-by.livejournal.com/77979.html
Какое емкое описание всего треда.
Не знаю, под каким тегом спрашивать такие вопросы, так что поставил названия языков, пользователи которых могут знать ответ.
Читаю про structural и nominal typing, возникла пара вопросов:
• в примерах структурной типизации[1] мы определяем функцию, которой от параметра нужен лишь метод set_x. Это разве не duck typing получается?
• правильно ли я понимаю, что nominal typing — это просто алиасы для типов (newtype в Haskell или typedef в C)?
1. https://en.wikipedia.org/wiki/Structural.....em#Example
Avoid success at all costs это, конечно, хорошо, но когда из-за каких-то конфликтов версий нельзя просто сделать cabal install --reinstall --flags="with_xft" xmobar — это печалит. Переустанавливаю теперь заново десяток библиотек, да. Пакетного менеджера ещё нет? Cabal nirvana во что-то юзабельное выросла?
GPL — монада. Доказательства законов приводить не буду из-за того, что они не проходят мысленный тайпчекинг (можете представить себе рефакторинг, который из обычной программы делает GPLную? Вот и я не могу). Inspired by http://bnw.im/p/BIZZJN#I2H