← All posts tagged log

У соседа купили дом. Новые соседи весь день собирали листья и теперь палят их в метре от моей брички. Вышел, поглядел, вроде мужик взрослый и откуда-то взял деньги на покупку дома в наши не самые простые времена. Так этот уебок через пять минут включил вентилятор для газона и начал им дуть в костер в сторону машины. То ли на терпилу тестил, то ли просто тупой — сходу не понял, поэтому отогнал подальше и ничего выяснять не стал.
Такой день.

Похоже придется провести остаток жизни точно так же — в рашке и нищете
Выхода из этого ада нет, это удел аутлайеров, 1% тех кому удалось пройти по канату
То что мы стали ближе к выходу, к решению — всего лишь утешительная рационализация, дешевый наполнитель образовавшейся от ошибок пустоты
Смысла выходить из пьяного угара больше не вижу
Такие дела

никогда бы не подумал, что с нетерпением буду ждать своей рабочей смены, что на работу буду ходить с радостью.
работать грузчиком на свежем воздухе, кажется, ничего лучше быть не может: ответственности ноль, думать не надо (хотя думать я люблю, но в своих интересах, дома, разрабатывая любимые проекты в качестве хобби, а на работе голова отдыхает), и, конечно же, физическая активность, силовая нагрузка — то, что доктор прописал для любого компьютерщика с сидячим образом жизни.
пока здоровье, молодость позволяют, буду работать грузчиком. :3

по утрам развожу хлебушек по магазинам (уж всяко полезнее чем быдлокод писать), с 6:00 утра до 16:00 вечера, иногда получается закончить раньше, и так по графику трое через трое. зряплата 10к. работа оче нравится. так что... буду работать, пока работается. :3

log

Прийдумал список на продолжениях с snoc'ом за не аммортизированный O(1). head/tail/cons стоят также. Интересно, получится ли придумать такую структуру чтобы init/tail тоже стоял O(1), как в языках с мутабельностью, но при этом чтобы структура оставалась персистентной. Похоже это невозможно, но надо понять почему.

Второй день продолжаются такие глупые попытки как перехитрить природу и написать претти принтер на функторах. По-хорошему принтер это: 
newtype P doc a = P { runP :: a -> doc }; но это контравариантный функтор. Если немного порисовать стрелочки, то можно заметить что выкрутиться можно представив принтер как отношение, добавив недостающую стрелку в обратную сторону. В свою очередь, отношение можно представить как [(a, doc)], то есть получаем: 
newtype P doc a = P { runP :: [(a, doc)] }; теперь все хорошо, есть также необходимые инстансы для Applicative и Alternative, которые можно взять, вообще говоря, из mtl, так как второй вариант есть (WriterT Doc (ListT m) a). За исключением одного очевидного недостатка -- длинна итогового списка; самый неприятный, можно сказать взрыв, происходит в (<*>), ведь length (a <*> b) = length a * length b. Ну и length (a <|> b) = length a + length b, что тоже как-бы.
Inspired by "Invertible Syntax Descriptions: Unifing Parsing and Pretty Printing" хочется все-таки как-то сделать, не смотря на то, что похоже, это невозможно. (Надо наверно попытаться сделать HOAS и свой Doc, может тогда что-то получится)