Home
OCaml (aka Objective Caml), а также прочие ML'и, F#, Coq, etc
ocaml@conference.jabber.ru
Пятница, 12 июля 2013< ^ >
f[x] установил(а) тему: OCaml / ОКэмл / Камль -- http://ocaml.org/ | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | KEEP CAML AND CURRY ON | F#, Coq - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[01:03:24] Typhon вошёл(а) в комнату
[03:01:23] ftrvxmtrx вышел(а) из комнаты
[03:02:59] ftrvxmtrx вошёл(а) в комнату
[03:14:34] ftrvxmtrx вышел(а) из комнаты
[03:16:58] ftrvxmtrx вошёл(а) в комнату
[03:41:27] ftrvxmtrx вышел(а) из комнаты
[04:32:04] ftrvxmtrx вошёл(а) в комнату
[05:46:34] f[x] вошёл(а) в комнату
[07:34:58] <f[x]> http://roscidus.com/blog/blog/2013/07/07/ocaml-binary-compatibility/
[08:15:58] Zbroyar вошёл(а) в комнату
[08:16:58] <gds> f[x]: какие-то ональные извращения и Obj.  Нехай топлевел использует, в самом деле.
[09:23:14] komar вошёл(а) в комнату
[09:40:43] tilarids вошёл(а) в комнату
[09:58:51] tilarids вышел(а) из комнаты: Replaced by new connection
[09:58:52] tilarids вошёл(а) в комнату
[09:59:56] f[x] вышел(а) из комнаты
[10:41:39] tilarids вышел(а) из комнаты
[10:41:50] tilarids вошёл(а) в комнату
[10:43:42] ermine вошёл(а) в комнату
[10:45:34] f[x] вошёл(а) в комнату
[11:26:31] tilarids вышел(а) из комнаты: Replaced by new connection
[11:26:34] tilarids вошёл(а) в комнату
[11:31:58] tilarids вышел(а) из комнаты
[11:32:11] tilarids вошёл(а) в комнату
[11:45:35] tilarids вышел(а) из комнаты
[11:45:49] tilarids вошёл(а) в комнату
[11:57:30] tilarids вышел(а) из комнаты
[11:57:43] tilarids вошёл(а) в комнату
[12:06:29] Typhon вышел(а) из комнаты
[12:10:01] Zbroyar вышел(а) из комнаты
[12:17:03] zinid вошёл(а) в комнату
[12:19:57] tilarids вышел(а) из комнаты
[12:54:29] <ADEpt> хозяйке на заметку:
% cat tmp.ml
let foo ?bar ~baz = ()
let foobinator foo = foo
let wtf () = (foobinator foo) ~bar ~baz
% camlp4o tmp.pl
let foo ?bar ~baz = ()
  
let foobinator foo = foo
  
let wtf () = foobinator foo ~bar ~baz
[12:54:38] <ADEpt> Кто видит, как camlp4o поломал код?
[13:01:08] <f[x]> забавно, я бы не заметил просто читая
[13:01:23] <f[x]> вообще эти partial application'ы с label'ами - мутная тема
[13:01:38] <ADEpt> я бы сказал, что optional arguments - мутная тема
[13:01:51] <gds> а я ещё чешу репу:
# let wtf' bar baz = foobinator foo ~bar ~baz;;
Error: This expression has type ?bar:'a -> baz:'b -> unit
       but an expression was expected of type bar:'c -> baz:'d -> 'e
[13:02:26] <f[x]> gds: вывелся именованный, хотя там опциональный
[13:02:41] <gds> да разве?
[13:02:53] <ADEpt> а разве нет?
[13:03:00] <f[x]> таки да
[13:03:12] <f[x]> но совсем неочевидно почему
[13:05:27] <gds> продолжаю не понимать:
# let wtf'' bar = foobinator foo ~bar;;
Error: This expression has type ?bar:'a -> baz:'b -> unit
       but an expression was expected of type bar:'c -> 'd
# let wtf''' bar = foobinator foo ?bar;;
val wtf''' : 'a option -> baz:'b -> unit = <fun>
[13:07:40] <ADEpt> (да, там конечно же должно быть wtf ~bar ~baz в последней строке, но это сути не меняет)
[13:09:45] Typhon вошёл(а) в комнату
[13:11:44] <gds> как я понял, проблема в том, что foobinator : 'a -> 'a, и когда передаём ему foo, данный 'a превращается bar:'b -> baz:'c -> unit, тогда как должен был бы в ?bar:'b -> baz:'c -> unit.
[13:11:56] <ADEpt> угу
[13:12:26] <gds> ADEpt: пиши два багрепорта, рисуй две звёздочки на борту компа.
[13:13:20] <ADEpt> я был вторым пилотом :)
[13:13:28] <ADEpt> первый пилот рисует багрепорт
[13:13:30] <ADEpt> а почему два?
[13:13:53] <f[x]> второй gds'у что он тармазитъ!
[13:14:35] <gds> два -- 1. неправильное превращение ?bar в ~bar, 2. неправильная работа camlp4o.
[13:16:18] <ADEpt> а, точно
[13:31:19] avkarpich вошёл(а) в комнату
[13:37:37] <ADEpt> Т.е. суть проблемы более коротко можно выразить так:
# (fun f -> f ~foo:1)(fun ~foo -> foo+1);;
- : int = 2
# (fun f -> f ~foo:1)(fun ?(foo=1) -> foo+1);;
Error: This function should have type foo:int -> 'a
       but its first argument is labelled ~?foo
[13:39:24] <ADEpt> получается что с optional arguments все места применения должны ссылаться на функцию с optional argument по ее имени
[13:39:26] f[x] вышел(а) из комнаты
[14:05:31] <ADEpt> http://caml.inria.fr/pub/docs/manual-ocaml/manual006.html , 4.1.2
[14:05:52] <ADEpt> один багрепорт :)
[14:06:45] <avkarpich> это не баг, это фича)
[14:15:47] ludovik вошёл(а) в комнату
[14:21:03] ludovik вышел(а) из комнаты
[14:57:34] avkarpich вышел(а) из комнаты
[15:05:53] Zbroyar вошёл(а) в комнату
[17:18:40] f[x] вошёл(а) в комнату
[17:35:46] f[x] вышел(а) из комнаты
[18:31:38] Zbroyar вышел(а) из комнаты
[19:15:34] zinid вышел(а) из комнаты
[19:33:44] komar вышел(а) из комнаты: Replaced by new connection
[19:33:45] komar вошёл(а) в комнату
[20:43:17] Typhon вышел(а) из комнаты
[22:45:24] ermine вышел(а) из комнаты
[23:09:11] ermine вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!