From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 7B16C7FA5E for ; Wed, 10 May 2017 15:29:28 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=mandrykin@ispras.ru; spf=Pass smtp.mailfrom=mandrykin@ispras.ru; spf=None smtp.helo=postmaster@smtp.ispras.ru Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of mandrykin@ispras.ru) identity=pra; client-ip=83.149.199.196; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="mandrykin@ispras.ru"; x-sender="mandrykin@ispras.ru"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of mandrykin@ispras.ru designates 83.149.199.196 as permitted sender) identity=mailfrom; client-ip=83.149.199.196; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="mandrykin@ispras.ru"; x-sender="mandrykin@ispras.ru"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@smtp.ispras.ru) identity=helo; client-ip=83.149.199.196; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="mandrykin@ispras.ru"; x-sender="postmaster@smtp.ispras.ru"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3A2fUzrh/gjuCAWf9uRHKM819IXTAuvvDOBiVQ1KB4?= =?us-ascii?q?1OocTK2v8tzYMVDF4r011RmSDNmds6oMotGVmpioYXYH75eFvSJKW713fDhBt/?= =?us-ascii?q?8rmRc9CtWOE0zxIa2iRSU7GMNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1?= =?us-ascii?q?Ifn+FpLPg8it2e2//5Lebx9UiDahfLh/MAi4oQLNu8cMnIBsMLwxyhzHontJf+?= =?us-ascii?q?RZ22ZlLk+Nkhj/+8m94odt/zxftPw9+cFAV776f7kjQrxDEDsmKWE169b1uhTF?= =?us-ascii?q?UACC+2ETUmQSkhpPHgjF8BT3VYr/vyfmquZw3jSRMNboRr4oRzut86ZrSAfpiC?= =?us-ascii?q?gZMT457HrXgdF0gK5CvR6tuwBzz4vSbYqINvRxY7ndcMsaS2RfQ8hfWS9PDY2+?= =?us-ascii?q?YIsBAOUPMvpXopLhp1sXtxayGRWgCeLtxzJOm3T43bc60+MkEQze2wIgHtEOsH?= =?us-ascii?q?TOo9X0MKcZTOe7w7POzTredfNX2TT96InOchs8pvyMWKh/cczMxkk1FwLFjVSQ?= =?us-ascii?q?qYr+MjOUzeQNq3Kb4PB7Ve61kW4nthh8rz6yzckvkonEnoEYx17e+Slkz4s4Ic?= =?us-ascii?q?e0RFN/bNOgCpdcqiWXOopwT8g/WW9nojw6xacDuZOjfCgF1pAnxxnHZvycdoiI?= =?us-ascii?q?/grjWPyQITdjnHJlYqiwhw2o/Ui61+3wTsi00FBUoSpZitTBtX4A2wbO5sWITv?= =?us-ascii?q?Zx5Fqt1DKL2gzJ9+1JJUE5mbLeK5E7w74wkpQTsV7EHi/zgEj2ibWZdkM59eiy?= =?us-ascii?q?6+XnYbTmppmHOo91kQH+Kr4uldakAegiKAgOQnCX+f6g27374U35XLJKg+Uqna?= =?us-ascii?q?bDtZDaId0Xpqq4Aw9OzoYu8A2/Djej0NQAh3YLNlNFeBSdj4joIV7COv74De3s?= =?us-ascii?q?y2irxTxiwvSDOrz6Hr3MKGLCmfHvZ/I10UNRxEIMzNRE4JQcXroMLPP3XkbZu9?= =?us-ascii?q?nRDxt/OAuxlbXJEtJ4g6YfWmKGA6vRFarUvUWZ5eMpa72JbYkZoif+Kv4N5uX2?= =?us-ascii?q?l3Yi30UAK/r6laALYWy1S6w1a36SZmDh15JYST8H?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BSBABDFRNZ/8THlVNdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBhAyBDINpiwuQY4x0iw0khgAChUEUAQEBAQEBAQEBAQFqKIIzIgG?= =?us-ascii?q?CQAEFIwRSEAkCGAICBSECAg8BRwYBijeVA51ggWw6inUBAQgBAQEBJIELik2EY?= =?us-ascii?q?4MOgmABBIk9h2ZYjA+HHI5YiBmGeZRDNiGBCk8wTIZ4PTaJGQEBAQ?= X-IPAS-Result: =?us-ascii?q?A0BSBABDFRNZ/8THlVNdHAEBBAEBCgEBFwEBBAEBCgEBhAy?= =?us-ascii?q?BDINpiwuQY4x0iw0khgAChUEUAQEBAQEBAQEBAQFqKIIzIgGCQAEFIwRSEAkCG?= =?us-ascii?q?AICBSECAg8BRwYBijeVA51ggWw6inUBAQgBAQEBJIELik2EY4MOgmABBIk9h2Z?= =?us-ascii?q?YjA+HHI5YiBmGeZRDNiGBCk8wTIZ4PTaJGQEBAQ?= X-IronPort-AV: E=Sophos;i="5.38,319,1491256800"; d="scan'208";a="272503105" Received: from bran.ispras.ru (HELO smtp.ispras.ru) ([83.149.199.196]) by mail2-smtp-roc.national.inria.fr with ESMTP; 10 May 2017 15:29:07 +0200 Received: from molnar.localnet (molnar.intra.ispras.ru [10.10.2.183]) by smtp.ispras.ru (Postfix) with ESMTP id 8E01761286; Wed, 10 May 2017 16:29:06 +0300 (MSK) From: Mikhail Mandrykin To: caml-list@inria.fr, Reed Wilson Cc: Leo White , Jeremy Yallop Date: Wed, 10 May 2017 16:29:06 +0300 Message-ID: <99634372.gpbQ14KDAs@molnar> User-Agent: KMail/5.1.3 (Linux/4.4.0-70-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: References: <1494320088.2074838.970492485.42DF8438@webmail.messagingengine.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Subject: Re: [Caml-list] Type generalization confusion On =D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=B8=D0=BA, 9 =D0=BC=D0=B0=D1=8F 2017 = =D0=B3. 12:56:24 MSK Reed Wilson wrote: > The current issue I'm actually facing is trying to create a lookup table > for these templates, which only differ by the length of some of the field= s. > For example: >=20 > let lookup_array =3D [| String (0, End); String (1, End) |] > let lookup_fun i =3D String (i, End) Since what's needed here is actually not a generalized array type ( 'a. ((string -> 'a, 'a) field array) ), but the generalized type of the element ( ('a. (string -> 'a, 'a) field) array ), this could be work-around by introducing an intermediate universal type: type (_, _) field =3D | Int8 : ('a, 'b) field -> ((int -> 'a),'b) field | String : int * ('a, 'b) field -> ((string -> 'a), 'b) field | End : ('b, 'b) field type 'a lookup_param =3D { f : 'b. ('a -> 'b, 'b) field } [@@unboxed] let lookup_array =3D [| { f =3D String (0, End) }; { f =3D String (1, End) = } |] let lookup i =3D match lookup_array.(i) with { f } -> f let of_chan : ('a, 'b) field -> 'a -> in_channel -> 'b =3D fun _ _ _ -> ass= ert=20 false let x =3D of_chan (lookup 0) (fun s -> int_of_string s) stdin let y =3D of_chan (lookup 0) (fun s -> s) stdin [@@unboxed] should have allowed this without any penalty of using an=20 intermediate wrapper, but currently it fails: Fatal error: exception File "bytecomp/typeopt.ml", line 97, characters 6-12= :=20 Assertion failed (Typeopt.classify doesn't support universal types). But even without [@@unboxed] this at least allows to avoid allocation of=20 `String (i, End)` inside the loop. -- Mikhail