f[x] установил(а) тему: Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ
[00:29:20] ygrek вошёл(а) в комнату [00:31:17] <gds> Error: In the definition of L.tb, type L.ta (L.id (L.id 'a)) should be L.ta 'b -- вайвайвай. [00:31:21] <ygrek> gds: трави камло-лист, неча тут остатки мизкив разрывать [00:32:01] <gds> придётся... ща, дорву ещё чуток, и буду телегу сочинять. [00:57:43] ygrek вышел(а) из комнаты [01:23:04] Typhon вышел(а) из комнаты [01:39:29] <gds> отписал. https://sympa-roc.inria.fr/wws/arc/caml-list/2011-09/msg00046.html [01:40:13] <gds> с другой стороны, они там что, сдурели, что ли, традиции рушить? Почему дата "Thu, 8 Sep 2011 00:29:20 +0300" вместо NaN-NaN-NaN? [01:40:49] <gds> и последнее. Для действительно крепких разумом. http://paste.in.ua/3005/ [01:41:12] gds вышел(а) из комнаты [03:38:36] letrec вошёл(а) в комнату [03:38:42] letrec вышел(а) из комнаты [03:38:58] letrec вошёл(а) в комнату [04:46:19] letrec вышел(а) из комнаты [07:04:35] letrec вошёл(а) в комнату [07:04:40] letrec вышел(а) из комнаты [08:07:38] iNode вошёл(а) в комнату [08:21:17] iNode вышел(а) из комнаты [08:30:12] zert вошёл(а) в комнату [09:00:54] iNode вошёл(а) в комнату [09:43:24] komar вышел(а) из комнаты [09:58:35] komar вошёл(а) в комнату [10:34:11] ermine вошёл(а) в комнату [11:34:59] <f[x]> gds: реально пацанский камло! [11:55:14] gds вошёл(а) в комнату [12:03:07] <gds> ну, в общем, мне Жак ответил, как я и ожидал, и очень быстро, но радости мне это не принесло: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-09/msg00047.html -- разве что ясности. Не могу найти правильные слова, чтобы поблагодарить его. [12:25:54] klapaucius вошёл(а) в комнату [13:09:25] Kakadu вошёл(а) в комнату [13:50:58] Typhon вошёл(а) в комнату [13:57:33] <Kakadu> у меня глюки или тут реально русские буквы вместо ключевых слов? http://paste.in.ua/3005/ [13:57:37] <Typhon> Валь и Вал ! [13:58:00] <gds> весело там весело!1111 [13:58:14] <gds> оборжёшься прямо :[ [14:05:59] <gds> ну ладно, хрен с ним, метода lst 'a -> lst 'b не будет. но тогда согласился бы на отдельную функцию типа map, которая всё, что можно было бы отобразить, отображала бы. хотя бы массивы и списки, завёрнутые в объекты. то есть, чтобы объекты-аргументы можно было как-нибудь ограничить по типу ( < mappable : ... ; .. > ), а объекты-результаты имели правильный тип: для lst 'a -- lst 'b, для условного arr 'a -- arr 'b. [14:08:14] <Kakadu> gds: ну вроде это должно получиться. Иначе придется учить тайпклассы и переходить на х-ль :trollface: [14:09:03] <gds> должно? как записать эту функцию, какой у неё будет тип? [14:14:14] <Kakadu> да, я поторопился [14:15:52] <Kakadu> по-видимому надо, чтобы в сигнатуре mappable была какая-та инфа о типе контейнера и о том как его пересобрать для новых значений [14:15:56] <gds> да! [14:16:37] <Kakadu> мне кажется, что тут будет жуткая потеря производительности [14:16:54] <Kakadu> например у тебя Map завернутый в класс хрунится как Б-дерево [14:16:57] <gds> а мне для тех целей, где производительность не нужна. [14:17:07] <Kakadu> тогда... [14:27:48] <Kakadu> я хз [14:28:12] <Kakadu> не понятно как описать тип класса, у которого есть метод, возвращающий экземпляр себя [14:28:22] <Kakadu> себя, т.е своего типа [14:28:35] <gds> да, и при этом с другим типовым параметром. [14:28:50] <gds> а так -- < methods ; .. > as 'a -> 'a и всё [14:29:31] <Kakadu> нет, я вроде не про то [14:30:03] <gds> можно возвращать не экземпляр себя, а нечто, из чего можно потом сделать экземпляр себя: например, функцию list 'a -> lst 'a. [14:30:41] <Kakadu> class ['a] listcont = object method mappable : 'a unicont -> 'a listcont end [14:30:53] <Kakadu> непонятно как в общем случае описать такие классы [14:31:54] <Kakadu> что-то типа val memap (type 'a t) : <mappable : 'a unicont -> 'a t; ..> as 'a t -> ... [14:33:04] <gds> вот-вот, (type 'a t) тоже думал, нет такого :) и при разворачивании первоклассного модуля тоже засада, (val M : F with type 'a t = 'a list) не катит, так как только типы без параметров можно ограничивать. [14:34:05] <Kakadu> может быть стоит выловить какогонибудь левого чувака из мира агдаистов и спросить как бы они это решали? [14:34:21] <Kakadu> может там есть вкусняшки? [14:35:57] <gds> было бы интересно, однако там куча типовых аннотаций ставится, и почти уверен, что в данном случае тоже потребуются. но, всё же, было бы интересно. [14:37:37] <Kakadu> а если бы вместо объекта у тебя был модель, ты бы смог написать такую хорошую Map? [14:37:48] <Kakadu> модуль* [14:38:40] <gds> вот это и смотрю, в том числе в первоклассные модули. Но не очень получилось бы: как в map func container выцепить в рантайме, какому модулю принадлежит container? [14:41:34] <Kakadu> conteiner : < method module_primitive:'a tt; method module_map: ('a->b) -> 'a tt -> 'b tt; ..> [14:43:23] <gds> вроде пробовал такое, но сейчас перепроверю точно. [14:49:13] <Kakadu> я думал, что когда я пытался с помощью объектов соединять сигналы и слоты, то получалось камлёвоё извращение, но gds меня превзошел. [14:49:58] <Kakadu> Хиндли и Милнер сейчас на небе ужасаются от того, что их алгорифму подсовывают [15:00:35] ermine вышел(а) из комнаты [15:06:42] <gds> Kakadu: сходу не выходит по твоей идее, но вроде близко должно быть: http://paste.in.ua/3008/ [15:15:42] <Kakadu> кхм [15:15:48] <Kakadu> ты написал !'c 'd [15:16:08] <Kakadu> нет [15:16:11] <Kakadu> черт [15:38:30] <Kakadu> gds: http://paste.in.ua/3009/ тебя тип map не смущает? [15:39:43] <gds> Kakadu: в строке 9 -- ээ, по идее, там тоже должен быть полиморфный метод... [15:40:24] <Kakadu> gds: а почему он ничерта не полиморфный? [15:40:55] <Kakadu> может потому что 'a list инвариантный? ... [15:41:06] <Kakadu> нет, это не из той оперы [15:41:07] <gds> не в этом дело. [15:43:01] <Kakadu> просто я хотел написать value map: !'a 'b. ('a -> 'b) -> < map : ('a -> 'b) -> _ -> _ ; .. > -> _ = fun f cont -> cont#wrap (cont#map f cont#v); [15:43:03] <gds> а. оно просто отображает переменные без явного указания. будь не полиморфный метод, этого бы не было: # value ma f x = q#map f x; value ma : ('a -> 'b) -> list 'a -> list 'b = <fun> обычный value restriction, так как q#map это таки выражение, требующее вычислений. [15:43:09] <Kakadu> но там под подтиповости не сходится [15:43:38] ermine вошёл(а) в комнату [15:43:49] <gds> ну вот правильно, по идее, хотел написать. только там, скорее, полиморфности не сходятся и/или какая-то переменная выбегает наружу. [15:54:53] <gds> прогресс -- придумал, как всё сделать с магией. (а именно, пример -- из рассылки, а во внешней функции map просто брать первое поле возвращённой записи с типом "ta", и применять к нему маппящую функцию.) но неспортивно. [16:19:40] shaggie вошёл(а) в комнату [16:24:38] letrec вошёл(а) в комнату [16:38:16] komar вышел(а) из комнаты: Replaced by new connection [16:38:16] komar вошёл(а) в комнату [17:19:01] shaggie вышел(а) из комнаты [17:40:12] ftrvxmtrx вышел(а) из комнаты [17:45:39] Kakadu вышел(а) из комнаты [18:18:47] <f[x]> хм, http://caml.inria.fr/cgi-bin/viewcvs.cgi/?view=rev&rev=11180 [18:28:13] Kakadu вошёл(а) в комнату [18:33:13] ftrvxmtrx вошёл(а) в комнату [19:01:46] <Typhon> f[x]: а ты оперой пользуешься вроде бы? под дебианом или убунтой? [19:01:58] <f[x]> deb.opera.com [19:02:41] <Typhon> нене, знаю где найти, я скорее про ощущения, и про "всё ли ок" [19:04:28] <f[x]> а, ну я уже давно с оперой на дебиане, так что если что и не ок, то я привык :) [19:04:34] <f[x]> вроде всё чотко [19:09:39] <f[x]> 450 вкладок - RSS 1.9G :) [19:12:30] <Typhon> пойду покажу файрфоксерам ^_^ [19:14:16] letrec вышел(а) из комнаты [19:22:46] ftrvxmtrx вышел(а) из комнаты [19:39:39] <f[x]> http://devmusings.legiasoft.com/tag/ocaml?do=showtag&tag=tag%3Aocaml [19:39:44] <f[x]> не видел раньше [20:15:46] ftrvxmtrx вошёл(а) в комнату [20:31:21] komar вышел(а) из комнаты [20:34:43] komar вошёл(а) в комнату [21:06:47] Typhon вышел(а) из комнаты [21:11:29] ftrvxmtrx вышел(а) из комнаты [21:11:47] ftrvxmtrx вошёл(а) в комнату [21:14:37] ftrvxmtrx вышел(а) из комнаты [21:59:20] ftrvxmtrx вошёл(а) в комнату [22:29:48] Typhon вошёл(а) в комнату [22:55:07] Typhon вышел(а) из комнаты [22:55:51] Typhon вошёл(а) в комнату [23:12:29] zert вышел(а) из комнаты [23:21:36] komar вышел(а) из комнаты [23:25:24] ermine вышел(а) из комнаты [23:59:44] iNode вышел(а) из комнаты