Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 8 июля 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:11:27] Typhon вошёл(а) в комнату
[00:32:03] shaggie вышел(а) из комнаты
[00:34:12] <ermine> gds: стой!
[00:35:19] <ermine> мнээ, а напомните урл пастбина?
[00:35:29] <Typhon> paste.in.ua
[00:36:03] <komar> dump.bitcheese.net
[00:37:17] <ermine> пасиб, я на ua зашла
[00:37:27] <ermine> gds: ты там ваще или уже поздняк?
[00:38:02] ermine мучительно рожала итерат и посему жаждет быстрой критики от gds
[00:38:32] <ermine> gds: http://paste.in.ua/2703/
[00:40:19] <ermine> а вы. дети, уже чонить поняли из этого кода?
[00:41:21] komar не ходил, но осуждает.
[00:42:33] <ermine> да ваще хрен поймешь как кормить итераты
[00:45:39] <ermine> таак, в связи с этим научным открытием, надо переписать часть кода
[01:51:11] ermine вышел(а) из комнаты
[02:22:06] Typhon вышел(а) из комнаты
[03:00:22] ftrvxmtrx вышел(а) из комнаты
[03:00:26] ftrvxmtrx вошёл(а) в комнату
[03:28:24] gds вышел(а) из комнаты
[03:28:40] zert вышел(а) из комнаты
[03:53:13] bobry вышел(а) из комнаты
[03:57:37] bobry вошёл(а) в комнату
[04:02:08] gds вошёл(а) в комнату
[04:07:09] klapaucius вышел(а) из комнаты
[06:23:19] komar вышел(а) из комнаты
[07:39:31] iNode вышел(а) из комнаты
[08:26:11] iNode вошёл(а) в комнату
[09:37:35] Typhon вошёл(а) в комнату
[10:36:53] bobry вышел(а) из комнаты
[10:38:45] bobry вошёл(а) в комнату
[10:58:59] ftrvxmtrx вышел(а) из комнаты
[11:06:20] <gds> ermine: в твоём коде вижу нехвостовую рекурсию -- вызов в строке 13.  Признак того, что что-то не так.  Кроме того, наверное, есть смысл документировать в типе верхней функции, что там она делает точно, ибо я не совсем понял сходу.
[11:21:43] bobry- вошёл(а) в комнату
[11:28:01] Typhon вышел(а) из комнаты
[11:33:23] <bobry-> товарищи, а можно odb форкнуть в camlunity?
[11:33:26] <bobry-> или лучше себе?
[11:36:57] <f[x]> разрешаю :)
[11:37:07] <f[x]> а чего там исправлять хочешь?
[11:37:43] <bobry-> да ваще фигню, Filename.temp_dir вставить пока шо :)
[11:37:50] <bobry-> и oasis хочу еще туды
[11:38:27] klapaucius вошёл(а) в комнату
[11:38:39] ermine вошёл(а) в комнату
[11:41:53] <f[x]> можно кстати на irc пожаловаться, там автор всё оперативно фиксит
[11:42:56] <bobry-> да я сам хочу поковырять, а irc #ocaml?
[11:44:44] <ermine> gds: о да, в итератах код вообще не понятен с ходу и фиг сразу придумаешь код, полжизни сначала потратишь на то, чтобы скомпилился хоть
[11:46:45] ermine отсчитала 13 и тупо смотрит
[11:47:14] <ermine> а там вроде нет рекурсии
[11:48:07] <gds> ermine: "match ie_fold (r::acc) stream with", а вот ie_fold имеет код "| _ -> next acc iter "
[11:48:37] ftrvxmtrx вошёл(а) в комнату
[11:48:47] <gds> не, я не спорю, что может быть так, что нехвостовая рекурсия там в тему, но просто подозрение.
[11:49:44] <f[x]> bobry-: угу, на freenode
[11:55:27] komar вошёл(а) в комнату
[12:06:16] <ermine> gds: а, я поняла
[12:06:23] <ermine> ну подумаю еще
[12:17:00] Typhon вошёл(а) в комнату
[12:17:02] shaggie вошёл(а) в комнату
[12:18:35] <gds> ermine: рекомендую такие штуки конструировать исходя из типа в том числе.  описываешь тип результата и вперёд.
[12:51:59] <ermine> gds: да типы были видны в ругательствах компилятора, оставалось только угадать, где они искажаются
[12:54:08] <gds> тут ещё прикол в том, что типы -- это хорошая документация.
[12:57:32] <gds> ermine: например, я почти уверен, что в том joinI, который ты ниасилила пока (вроде), тело можно вывести из типа:
joinI : iteratee 'el1 (iteratee 'el2 'a) -> iteratee 'el2 'a
[13:13:19] <ermine> gds: тут не документировано что есть 'elN 'a
[13:13:35] <gds> в описании типа iteratee сказано.
[13:14:03] <gds> гы, да, можем.  логика такая: аргумент -- либо IE_done (x : iteratee 'el2 'a), либо IE_cont None k, либо IE_cont (Some e) k.  В первом и последнем случае понятно -- в первом результат уже есть, возвращаем, в последнем -- либо возвращаем ошибку, либо пытаемся использовать k.  В IE_cont None k тоже вариант только "использовать k".  Рассмотрим его.  На выход надо отдать iteratee 'el2 'a, но этот k принимает только stream 'el1.  Который может быть либо Chunk из каких-то элементов, либо EOF.  Но если это Chunk, то он или пустой (следовательно, итерат не должен изменить своё состояние), или состоит из какого-то элемента с типом 'el1.  Но таковых элементов итерату-результату, iteratee 'el2 'a, никто не даст, так как он принимает 'el2.  Следовательно, нужно передать в k поток, состоящий из EOF.  А так как итераты "хорошие", на EOF он выдаст либо ошибку, либо результат, которые обрабатываются и возвращают результат (см. начало этого сообщения).
[13:14:21] <ermine> gds: а вообще, я щас не помню, почему у меня в строке 13 рекурсия, вроде я ее и не хотела совсем, видимо на автопилоте добавила для компиляжа
[13:17:17] <ermine> gds: суть-то там одна в том, чтобы передавать аккумулятор в следующий итерат, а не потерять все бесценное накопленное тяжким трудом итератов
[13:18:03] <ermine> gds: в общем, пасиб за замечания :)
[13:28:46] zert вошёл(а) в комнату
[13:32:24] <gds> ermine: сохранять -- лучше в замыкании, через частичное применение, когда возвращаешь итерат, который хочет ещё данных.  С другой стороны, подумай точно, что тебе надо в результате получить.  Ну и в типах выписать не лишне.
[13:35:14] <ermine> ага
[13:35:21] <ermine> началось с попытки частично применить
[14:23:05] <gds> какая должна быть "идиоматическая" последовательность действий, если у меня нет ни исходников, ни _оазиса, но хочу иметь и то, и другое в результате?  Написать исходник, а для первой компиляции сделать oasis quickstart, где описать всё, и дальше пользоваться им для компиляции и тестирования?
[14:23:50] <Typhon> oasis quickstart => oasis setup-dev
[14:24:25] <Typhon> в репу класть лучше oasis setup ( и помнить про oasis dist-clean)
[14:31:44] <gds> Typhon: сделал именно так, всё получилось на отличненько.  Только вот непонятно, оно спросило про плагины (StdFiles, META, ..), но 1. не указало, в каком формате указать список (оказывается, "123" не катит, а "1 2 3" катит), 2. не было вопросов, касающихся непосредственно плагинов -- но тут, может, это и нормально.
[14:33:50] <Typhon> у DevFiles и StdFiles плагинов нечего спрашивать — плагины просто создают INSTALL.txt и Makefile всякие, а у META плагина потом можно в файлике указать XMetaName (как-то так) и description, но не спрашивает наверное потому что это задача не для квикстарта, для большинства вещей это настраивать может и не надо совсем
[14:34:07] <Typhon> номера плагинов через пробел, да, я по-другому как-то и не пробовал даже :-)
[14:36:57] <gds> ага, всё понятно.  И надеюсь, что pkg_findlibpackage оно воспринимает нормально, как в myocamlbuild.ml, которыми я пользовался раньше.
[14:53:59] f[x] кстати setup-dev никогда не пользовал
[14:58:55] <ermine> gds: небольшое изменение кода! всего в одной строчке! и как результат - чота не понимаю, пчу код не глючит
http://paste.in.ua/2709/
[15:00:14] <ermine> gds: там в | _ -> в первой функции изменение
[15:00:39] <gds> ermine: ты до сих пор не описала, что должен делать код, и я не могу догадаться самостоятельно.  Поэтому не могу помочь тут.
[15:05:41] <ermine> gds: iter бегает по стриму, а iter_fold собирает результаты этого iter до тех пор пока не наступит конец стрима, это вместо enum_lines, в котором стрим предварительно бьется на части
[15:11:11] <ermine> gds: а мне вот щас интересно допилить этот код, чтобы можно было его завершить не только по признаку конца стрима
[15:11:43] <ermine> скажем, собираем в одной строчке слова (вместо грубого enum_words)
[15:13:27] <gds> то, что ты описала, делается простым образом через joinI (sequence iter stream2list), где iter -- типа-аргумент.
[15:14:19] <gds> хотя надо посмотреть ещё.
[15:17:23] <Typhon> f[x]: я, кстати, тоже потом стал использовать каждый раз oasis setup просто, после того, как пару раз с setup-dev закоммитил ^_^
[15:21:42] <ermine> gds: гы, интересный метод освоения joinI
[15:22:36] <ermine> только stream2list смущает
[15:23:19] <gds> ermine: ну тебе надо было список на выходе получить?  Это оно и есть:
stream2list : iteratee 'el 'a -> iteratee 'el2 (list 'a)
[15:25:08] <ermine> у тебя там el и el2 пчу-то разные
[15:25:54] ermine залезла в код iteratees.ml
[15:25:55] <gds> потому что когда мы вычитали все элементы из первого итерата, можно вернуть их список в виде IE_done lst, но не обязательно, чтобы этот итерат кушал элементы того же типа.
[15:27:36] <ermine> gds: а как там помечает признак остановки повторения итерата-аргумента?
[15:28:37] <ermine> ну может не в stream2list, а где-нить еще есть варианты
[15:30:41] <gds> ermine: итерат iter возвращает результат, и этим результатом кормят другой итерат (stream2list тут).  фактически, развёртывается во что-то типа:
iter >>= fun r1 -> feed x r1 >>= fun x1 -> iter >>= fun r2 -> feed x1 r2 >>= fun x2 -> ...
, где r1 -- результаты итерата iter, x -- начальный итерат stream2list, который кормят до упора.
хотя может тебе не подойдёт это.
[15:31:05] ermine посмотрела на код stream2list
[15:31:16] <ermine> а я свой код писала, глядя на bindI
[15:31:41] <gds> Typhon: а может есть смысл написать какие-нибудь хуки, в pre-commit делать oasis setup, в post-commit делать oasis setup-dev?  Или тяжеловесно?
[15:33:09] <Typhon> кстати, хорошая затея, сам не пробовал, но попробую возможно (если выберусь из риаллайфа, гг ) :-)
[15:36:18] <ermine> ааа
[15:36:20] <ermine> не
[15:37:02] <ermine> S.append_to_list_rev chunk - это пожалуй ужасно
[16:08:49] klapaucius вышел(а) из комнаты
[16:14:54] <f[x]> шорт побери, вы знаете что ocamlopt -g генерит менее оптимизированный код?
[16:15:16] <gds> я догадывался.
[16:15:57] <f[x]> так с какого фига, я всегда считал что одинаковый!
[16:16:10] <f[x]> gcc генерит одинаковый с -g
[16:16:45] <gds> у многих компиляторов такое.  смысл -- чтобы в случае ковыряния с отладчиком код был "локализован", а не размазан.
[16:16:53] <f[x]> gds: нет!
[16:17:03] <f[x]> есть разница - debug info и опции оптимизации
[16:17:17] <f[x]> можно иметь полностью оптимизированный билд с дебаг инфо
[16:18:49] <gds> разница есть, конечно, но людишки раньше ныли, когда хотели, например, стэпбайстэп, а каждая следующая инструкция кидала в разные куски кода.
[16:19:11] <gds> а так-то -- наверное можно, но не уверен.  тот же инлайнинг хз как представить.
[16:19:34] <f[x]> никак ен представить, часть символов пропадает
[16:19:35] <f[x]> это ок
[16:20:07] <gds> в общем, претензии понятны.  в камл-лист жаловаться?
[16:20:29] <f[x]> ща в irc пожаловался
[16:20:53] ermine выкинула :: из своего загадочного кода
[16:24:10] <ermine> кстати, впервые применила функцию (::) как анонимную
[16:24:57] <ermine> забавно - часто применяла (=), (^), а до (::) еще ни разу не додумывалась
[16:26:07] <gds> ermine: когда реализуешь fold поверх итератов, вспомни, с какой целью итераты вообще делались, и начни использовать sequence :)
[16:28:01] <ermine> gds: а там у меня палюбому жестокая проблема с тем, когда останавливать фолд без накопления левых чанков для внутренних итератов
[16:28:47] <gds> у Олега была та же проблема, он её решил.  Ну ты понела.
[16:29:20] <f[x]> enlarge your Oleg!
[16:29:32] <ermine> gds: потом, у меня еще проблемы с парсингом, поэтому плаваю вокруг этой проблемы с парсингом
[16:30:13] <gds> f[x]: у меня пока 0.8 микроолегов!111
[16:30:27] <ermine> вот этот фолд щас пригоден чтобы проехаться по всему файлу одним и тем же итератом пошагово, щас бы понять как применить фолд в более мелких случаях
[16:30:39] <f[x]> gds: пруфлинк!
[16:30:52] <gds> f[x]: пруфпик, имеешь ввиду?  стыдно же.
[16:31:01] <ermine> в более мелких случаях вылезает борьба левой факторизации с бэктрэкингом
[16:31:02] <f[x]> аргх
[16:32:10] <gds> ermine: с парсингом у меня тоже проблемы.  Может абстрагироваться от итератов и народить общий интерфейс для чанковых парсеров?  Явно он простой будет -- "начать парсоту", "скушать чанк", "показать, что напарсили на текущий момент", "отдать конец файла и собрать результаты".
[16:33:19] <ermine> gds: ну в общем, мне пока всё интересно, хорошо хоть, что код работает, мне не лень препарировать его
[16:38:14] <ermine> чую, скоро рожу следующий вариант фолда
[16:50:38] <ermine> хм
[16:51:00] <ermine> (::) таки нельзя использовать
[16:51:20] <Typhon> https://github.com/jepst/CloudHaskell
[16:52:16] <ermine> заоблачный хаскиль
[16:53:05] <Typhon> парвел напоминает
[16:56:07] <gds> Typhon: ага, только с проблемкой: опять они берут node id и closure и магией запускают код на другой машине.
[16:57:31] <Typhon> а какой магией? компелятор патчить хотят?
[17:01:46] <gds> а не знаю, какой магией.  Представим, что на другом хосте чуть другой бинарник или другая ОС.  Может, конечно, они исключают такие случаи, но так получается неинтересно.
[17:02:17] <ermine> а в парвеле какая магия?
[17:03:20] <Typhon> """Another problem in Cloud Haskell's task layer is the fragility of the master node."""
[17:05:05] <gds> а в парвеле нет магеи.  с другой стороны, он ещё и не работает.  вкратце, там будет версионный протокол (если я правильно помню) и обращения к внутренним процессам по их именам.  то есть, запуском процессов занимается бинарник сам.
[17:05:13] <Typhon> """"A consequence of not supporting over-the-wire code updates is that upgrading a running
distributed application requires stopping, upgrading, and restarting all nodes, a poten-
tially time-consuming and error-prone procedure. One problem that can arise during an
upgrade is type inconsistency between versions, when the structure of a message changes.
Depending on the change made, a message might fail to deserialize, resulting in an error
message. Even worse, type changes might not be detected by the deserializer, resulting in
silently mangled values. The solution is to include a type
ngerprint, containing a hash
of the representation of the encoded type, with each message."""
[17:05:35] <Typhon> future works, как обычно, самое интересное в статьях :-)
[17:06:21] <gds> ага, а у меня future works не будет.  потому что будет очень скучная и ограниченная байда.
[17:08:04] <gds> type fingerprint -- ну, лол, чо.
[17:09:15] <ermine> отпечатать типы или тип отпечатков?
[17:09:29] <ermine> напечатать отпечатки даже
[17:09:41] <ermine> в общем, всё это сложновато
[17:09:58] iNode вышел(а) из комнаты
[17:10:17] <gds> а при наличии абстрактных и приватных типов -- ещё и мутновато.
[17:11:08] <ermine> а в хаскиле есть приватные типы?
[17:12:40] <ermine> весь интернет - это мой компьютер, поэтому обязательно откроется файл, который я хочу прочесть
[18:03:44] <ermine> gds: я бы еще и joinI оплевала из-за посылки EOF внутреннему итерату
[18:05:49] <gds> ermine: http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/2011/07/08.html#13:14:03.852154
[18:12:30] <ermine> gds: уж лучше сразу inner_k s >>% и смотреть что возвращает
[18:13:14] <ermine> в общем пытаюсь родить еще одного уродца
[18:14:29] <ermine> чота на этих итератах мысли плохо фокусируются, всё время хочется от них отвлечься
[18:15:22] <gds> кстати вот про inner_k s >>% -- не знаю даже.  Надо подумать, почему так сделано.
[18:15:49] <gds> и я там вроде напутал в объяснениях, в общем, на них лучше не смотреть на всякий случай.
[18:17:10] <ermine> я сначала осилю своё чудо, потом погляжу :)
[18:29:30] f[x] вышел(а) из комнаты
[18:30:41] f[x] вошёл(а) в комнату
[19:48:33] bobry- вышел(а) из комнаты
[19:56:01] ftrvxmtrx вышел(а) из комнаты
[20:00:12] <ermine> gds: а есть готовое api, чтобы переюзать чанк для итерата? например match s with Chunk _ -> iter s, без разворачивания iter
[20:00:41] <gds> посмотри в сторону feedI
[20:09:02] <ermine> неудобно юзать внутри калбэка
[20:10:35] <ermine> а, тьфу, не то
[20:53:33] Typhon вышел(а) из комнаты
[21:05:51] shaggie вышел(а) из комнаты
[21:06:06] <ermine> уф
[21:06:16] <ermine> еще один фолд появился, правда, без feedI
[21:09:31] <ermine> gds: я тут осознала, что все эти мои предыдущие фолды на самом деле не нужны - берем итерат и кормим его результат следующему итерату, который будет сам решать, циклиться или нет, но всяко запоминает результаты
[21:10:51] <gds> ermine: ну да :)  sequence примерно то и делает -- по порядку применяет итерат-аргумент и кормит его результатами следующих.  только не помню (и не хочу сейчас смотреть), как он с чанками поступает.
[21:12:12] <ermine> надо посмотреть на sequeyct (и наверное, найти чего охаять)
[21:19:15] <ermine> gds: ты про sequence_stream?
[21:19:40] ftrvxmtrx вошёл(а) в комнату
[21:20:43] <ermine> аа, is_finished более кавайно...
[21:21:41] <ermine> а нет, не кавайно
[21:21:45] ftrvxmtrx вышел(а) из комнаты
[21:21:57] ftrvxmtrx вошёл(а) в комнату
[21:22:26] <ermine> у меня код вдвое короче
[21:23:03] <ermine> но можно подумать как сделать красоту с is_finished
[21:24:39] <ermine> gds: ну ладно, с этим уже понятно, какие еще страшные итераты бывают?
[21:24:55] <gds> да они не страшные.  добрые внутри.
[21:25:36] <ermine> ну когда разруливать IO.m - страшные
[21:26:34] <ermine> я еще пучалась, что если в ie_doneM можно сунуть остаток чанка, то в ie_contM - не сунешь
[21:27:04] bobry вышел(а) из комнаты
[21:27:10] bobry вошёл(а) в комнату
[21:29:14] <ermine> gds: имхо feedI с логической ошибкой, он кормит уже разоблаченный итерат
[21:30:02] <gds> в ie_contM, когда оно не ошибка, и так понятно, что весь чанк скушан.
[21:30:30] <gds> насчёт feedI -- я тупо портировал.  Где надо -- использовал.  Может оно и подразумевает, что в остальных случаях кормить некого?
[21:31:09] <bobry> gds: нескромный вопрос, как тебя звать на битбакете?
[21:31:24] <bobry> что то не могу в логах найти
[21:31:38] <gds> bobry: https://bitbucket.org/gds/
[21:32:02] <bobry> неожиданно, по воспоминаниям было что то криптографическое
[21:32:04] <bobry> мерси :)
[21:33:56] <gds> на всякий случай тоже зафолловил.  надо быть в курсе!
[21:40:49] <bobry> sure, я пока только присматриваюсь
[21:41:11] <bobry> а amall это просто playground? я там заметил кусочки extlib'a вроде как  
[21:41:25] <gds> не extlib, а велосипед, просто файлы похожим образом называются.
[21:41:49] <gds> amall -- либа, которую использую в адском продакшоне.  ну и playground в том числе, особенно в плане http и dbi.
[21:42:41] <bobry> ох, заглянул в dbi -- я такой камль еще не понимаю :)
[21:43:35] <gds> а в какой именно файл?
[21:44:12] <bobry> dbi_pg
[21:45:12] <ermine> ng помечают те продукты, которые проживут бурной, но короткой жизнью
[21:45:56] <bobry> я на самом деле хотел amall, дабы посмотреть на аппликативные функторы the caml way -- они там еще есть?
[21:46:35] <gds> ох ты ж...  я видимо не пушнул туда свежак.
[21:47:41] <gds> так и есть, 6 changeset'ов.
[21:47:50] <ermine> о, уже мона смотреть на аппликативные функторы?
[21:48:00] <bobry> видимо щас мона буит :)
[21:48:45] <gds> теперь -- точно да.
[21:49:17] <gds> мусора там много закомментированного.  А так -- именно /src/dbi/dbi_pg.ml
[21:49:36] <gds> ну а чего бы мне было куда-то что-то пушить, у меня-то всё работает :]
[21:50:26] <ermine> аппликативные функторы - в амале или дби?
[21:51:13] <bobry> gds: а ты все в revised syntax принципиально пишешь?
[21:51:38] <gds> ermine: в репе amall по пути /src/dbi/dbi_pg.ml
[21:52:17] <gds> bobry: да, мне это помогает забыть кучу синтаксических правил и удовлетворяет эстетическим чувствам.
[21:54:04] <ermine> да по-моему от ревизеда три штуки используются - value fname, квадратные скобки в match и отсутствие скобочек и запятых в типах sum
[21:54:16] <ermine> так что терпимо
[21:54:41] <komar> Вы так говорите «ревизед» как будто это что-то плохое.
[21:54:53] <komar> Вот делать нефиг будет — перепишу все на ревизеде.
[21:55:35] <ermine> komar: вручную?
[21:55:44] <komar> А как же.
[21:56:37] <komar> Когда мне делать нефиг, я и не такие страшные вещи вытворяю.
[21:57:12] <gds> komar: а репки на меркуриал переведёшь?
[21:57:38] <komar> Кастую zert‘а в тред.
[21:58:04] ermine дочитала код sequence_stream до chunk_of и передумала использовать в своем коде
[22:04:43] ermine уставилась в dbi_pg.ml
[22:05:03] <ermine> там вот нет даже слова functor
[22:06:08] <gds> ermine: не в functor счастье.  Там Аф!  Афафаф!  Аваф!
[22:06:50] <ermine> хде?
[22:08:16] <gds> ermine: https://bitbucket.org/gds/amall/src/tip/src/dbi/dbi_pg.ml#cl-62 и ниже.
[22:09:34] <ermine> а, поиск по Af
[22:11:49] <ermine> Af2.( ( <*> ) - чота попахивает даже не х-лем, а чем-то плюсатым
[22:12:28] <ermine> вдобавок недовыделила одну скобку
[22:12:37] <gds> Плюсатый -- это брат Росатого!
[22:14:04] <ermine> gds: а пчу двоиные скобки?
[22:14:50] <gds> а хрен знает точно.  Я написал потому, что первые скобки для синтаксиса Module.(expr), вторые -- для ( оператор ).  Может с одними тоже будет ок.
[22:18:26] <ermine> это наверное пародия на gadt
[22:18:44] <ermine> модулями маскировать отсутствие классов типов еще
[22:19:49] zert вышел(а) из комнаты
[22:20:12] <gds> нет, это не gadt, посмотри внимательнее.
[22:21:55] <ermine> вообще ужос, заучивать операторы из модуля Af
[22:22:11] <gds> а это и не нужно.
[22:23:08] shaggie вошёл(а) в комнату
[22:34:17] Typhon вошёл(а) в комнату
[22:37:55] ermine пока не видит земляники за деревьями
[22:40:30] <gds> ermine: а что ты хочешь увидеть?  Как определены Af*?  Как используются?  Как выполняется частичная компиляция Af2 до Af?
[22:41:46] <ermine> gds: увидеть чо такое аппликативные функторы :) вроде аппликативные это где A.t = B.t
[22:45:11] <gds> ermine: э нет, аппликативные функторы в окамле и в х-е, откуда я спёр удобную абстракцию, это разные вещи.
[22:49:05] <ermine> http://www.mailrepository.com/caml-list.inria.fr/msg/3615708/
[22:51:09] <gds> ну да, это про разные вещи.  Обе полезны, но почему-то называются одинаково.
[22:52:19] <gds> "The absence of generative functors in OCaml also is the reason that you cannot unpack a first-class module in a functor body (non-locally), because that is unsound with applicative semantics."  --  а вот тут туплю.  first-class modules штоле только в одну сторону работают?  Или что они вообще имеют ввиду?
[22:52:21] <ermine> ну тогда осталось уяснить, что же за хаскильная вещь...
[22:52:59] <ermine> а на этом коде из dbi_pg сходу и не видно
[22:53:13] <ermine> то ли с непривычки, то ли с моей тупости :)
[22:55:30] <gds> ermine: проще всего почитать в посте: http://gds.livejournal.com/60543.html , по подстроке "Краткий экскурс в предмет аппликативных функторов".  А определения секретни!  Я их специально поместил в другой файл, чтоб никто не догадался!  https://bitbucket.org/gds/amall/src/tip/src/dbi/dbi_common.ml
[22:57:13] <gds> ermine: лучше вообще весь птсо почитай, если тебе интересен предмет.  Я старался спик фром май харт.
[22:58:43] <ermine> я уже заглядывала в dbi_common.ml и опечалилась от количества операторов
[23:02:02] <gds> разные задачи -- разные операторы.  Главное -- не перетупать.
[23:03:53] <ermine> ох, с постгресом все якшаются и мучаются кто как горазд
[23:04:32] <ermine> дби_вел
[23:05:50] ygrek вошёл(а) в комнату
[23:07:01] <ermine> а вот пчу-то не видела строготипизированного разбора мускуля
[23:07:38] <Typhon> а зачем строгая типизация в телефонных книжках?
[23:08:57] <ermine> вроде в телефонных книжках нонче модно юзать sqlite
[23:09:33] <Typhon> не, couchdb, на самом деле
[23:10:03] <ermine> Typhon: наверное чтобы ты случайно не записал свой номер телефона в поле дня рождения
[23:16:39] <bobry> товарищи, а неужели так совсем нельзя? http://paste.in.ua/2712/
[23:20:17] <gds> _так_ -- совсем не нужно, как показала практика.  Однако, если есть желание, http://paste.in.ua/2713/
[23:20:51] <bobry> gds: а как нужно?
[23:21:42] <gds> не было ещё нужды делать подобное.  Не знаю, как нужно.  Если доклеивать спереди-сзади или хитро обрабатывать, ksprintf обычно помогало, остальное всё вписывалось.
[23:34:31] <ermine> а еще лучше использовать технологию unparsing
[23:34:48] <ermine> есть описание и у того же Олега Киселева
[23:37:55] <gds> unparsing -- тоже хорошо.  Но Printf тупее-проще.  Но если есть запросы больше, чем Printf даёт, то тогда да, unparsing авторства Olivier Danvy, художественно переработанный Олегом.
[23:39:42] <bobry> спасибо, посмотрю
[23:40:50] <Typhon> а может camltemplates ?
[23:40:52] <ermine> в батарейках есть такой модуль
[23:43:06] <gds> вот расскажите, какая скотина такое -- http://paste.in.ua/2714/raw/ -- таки делает?  оазис, видимо, но всё же?
[23:44:31] <Typhon> "The following character string is too long" -- а это не ввиндоввс?
[23:44:36] <Typhon> ругается, смысле
[23:44:50] <gds> ой не знаю.  Есть вероятность.
[23:45:06] <gds> пока "ищу, где светло", по разным подстрокам в оверблде.
[23:45:52] <Typhon> https://encrypted.google.com/search?q=%22The+following+character+string+is+too+long:%22
[23:46:04] <Typhon> судя по гуглу -- что-то вендовое вполне может быть
[23:46:30] <Typhon> http://support.microsoft.com/default.aspx?scid=kb;en-us;830473
"On computers running Microsoft Windows 2000 or Windows NT 4.0, the
maximum length of the string that you can use at the command prompt is
2047 characters."
[23:47:08] <Typhon> надо рисовать баги легаллу и лвтшникам, думаю
[23:48:21] <gds> лвтшникам не за что.
[23:48:30] <gds> легаллу -- вариант.
[23:48:44] <gds> но мне надо багу не рисовать, а фиксить :)
[23:49:04] <Typhon> по ссылке предлагают workaround'ы
[23:53:59] <gds> Typhon: прочитал.  Варианты не ок (модифицировать принимающую программу), учитывая, что где-то был фокус с генерированием баш-файла, вот его буду смотреть на досуге.  Тем более, я открутил от камла раскрытие "@имяфайла", ибо надо.
[23:54:38] <Typhon> а кстати, ты же вроде лепил багу по поводу собаки, нету рез-та?
[23:56:18] <gds> вроде только отрывал.  В todo оно есть, значит багу не налепил.
[23:58:04] <gds> я тут практически уволился с фуллтайм-работы, поэтому время потихоньку появляется.  Хорошо, что всё нужное записывал, и теперь руки постепенно доходят.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!