From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 861837FEFC for ; Sun, 13 Jan 2019 08:49:29 +0100 (CET) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=christopher@gmerlin.de; spf=None smtp.mailfrom=christopher@gmerlin.de; spf=None smtp.helo=postmaster@mout.kundenserver.de Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of christopher@gmerlin.de) identity=pra; client-ip=212.227.17.13; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="christopher@gmerlin.de"; x-sender="christopher@gmerlin.de"; x-conformance=sidf_compatible Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of christopher@gmerlin.de) identity=mailfrom; client-ip=212.227.17.13; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="christopher@gmerlin.de"; x-sender="christopher@gmerlin.de"; x-conformance=sidf_compatible Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mout.kundenserver.de) identity=helo; client-ip=212.227.17.13; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="christopher@gmerlin.de"; x-sender="postmaster@mout.kundenserver.de"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3AMzeXchQ/n/48sHC1mzp4QwtA6Npsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa6yZRCN2/xhgRfzUJnB7Loc0qyK6/CmATRIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSizexfbB/IA+qoQnNq8IbnZZsJqEtxxXTv3BGYf?= =?us-ascii?q?5WxWRmJVKSmxbz+MK994N9/ipTpvws6ddOXb31cKokQ7NYCi8mM30u683wqRbD?= =?us-ascii?q?VwqP6WACXWgQjxFFHhLK7BD+Xpf2ryv6qu9w0zSUMMHqUbw5Xymp4qF2QxHqlS?= =?us-ascii?q?gHLSY0/m/XhMJukaxVoxWvqBNjzIPPb4GZKOBzc7nHcN8GW2ZMWNtaWSxbAoO7?= =?us-ascii?q?aosCF/QMPeZCr4n8vFsOsRy+BRGsBOzx0D9Dm3z53aw/0+QkDw7GxgkgEMgIsH?= =?us-ascii?q?TSsd74M7sdUeCvzKnJ1jXDc/RW2S/96IfWaBAsuv6MXbdufsrLzUkvFgXFgk+N?= =?us-ascii?q?poP7Jj6Y0PkGvWac7+plT+2vimgnphl+ojiq2MgskI3JhoMTylze6Cp23p45JN?= =?us-ascii?q?OiSE56fd6rDoFctyCBN4ZwX8gsQHlotT4kxrEbp5K3ZjYGxIolyhLFdvCKcZKE?= =?us-ascii?q?7g/tWeqJIjp1hGhpdKyiixqs60Ss1/DwW8iu3FpXsCZIkt/BvW0X2RPJ8MiIUP?= =?us-ascii?q?5981+h2TmR0wDT7flJIUUzlarGN54t2L0wlocVsUveACD2nl72g7GMdkU65Oeo?= =?us-ascii?q?8f7rbaj4qZOENo90jB/xMrg2l8ChHOg0LBICU3aF9em+zrHv4E/0TK9XgvA4iq?= =?us-ascii?q?XZtYrVJcUfpq63GQ9V1YMj5g6jADemytQYnGIHLE5CeBKfj4jmJUvOLev3Dfe6?= =?us-ascii?q?nVusijNrx/HAPrH7H5rCMGDPkK39crZl905c1A0zwMhD6J1OD7EBJOv/WkvwtN?= =?us-ascii?q?zDEh80KBe0wubiCNVlzIwSQ2OPAqmDMKPTq1CE/OwvI/PfLLMS7T30Lvxg4//1?= =?us-ascii?q?kVc4n0UcdO+nx8g5cne9S99mOUSCfX30gtobWVULuw8zVunjjlvKBTVTfXepQ6?= =?us-ascii?q?Uk5jwhII2jAJ3HR4brjLHXj3TzJYFfem0TUgPEKnzvbYjRA65dOhLXGddol3k/?= =?us-ascii?q?bZbkToYg0R+0swqjkehoK+fO/iwe857uhoAsu7/j0Coq/DkxNPyzlnmXRjguzG?= =?us-ascii?q?wNSiUy3aY5rUEvkg7eg5g9uORREJlo390MUgo+MsSGnel9Fsy0WR/HctqPU1u8?= =?us-ascii?q?XNi8Rz08HIo8?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BaAgDT7Dpchw0R49RihQGBAieYB4Icm?= =?us-ascii?q?WgIBR8MAYZrGgYGNBIBAwEBAgEBAQEBEwEBAQgNCQgpIwyCOiKDHIEOEyGEAwG?= =?us-ascii?q?CBQEKrwIziiCCbYlSF4F/g3UBAYNhghmFEwKiBAmBF1ZBhG6KYCRkgQBNh2Qrh?= =?us-ascii?q?z+PBotmgV2Bd3GDOwmCGxEJg36KIT4zgQUBAYlhAQE?= X-IPAS-Result: =?us-ascii?q?A0BaAgDT7Dpchw0R49RihQGBAieYB4IcmWgIBR8MAYZrGgY?= =?us-ascii?q?GNBIBAwEBAgEBAQEBEwEBAQgNCQgpIwyCOiKDHIEOEyGEAwGCBQEKrwIziiCCb?= =?us-ascii?q?YlSF4F/g3UBAYNhghmFEwKiBAmBF1ZBhG6KYCRkgQBNh2Qrhz+PBotmgV2Bd3G?= =?us-ascii?q?DOwmCGxEJg36KIT4zgQUBAYlhAQE?= X-IronPort-AV: E=Sophos;i="5.56,472,1539640800"; d="scan'208";a="291721584" Received: from mout.kundenserver.de ([212.227.17.13]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 13 Jan 2019 08:49:28 +0100 Received: from mortimer.gmerlin.de ([85.212.116.125]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1M7sQ8-1gdeqL1Oug-005422 for ; Sun, 13 Jan 2019 08:49:27 +0100 Date: Sun, 13 Jan 2019 08:49:19 +0100 From: Christopher Zimmermann To: caml-list@inria.fr Message-ID: <20190113084919.5cfaa055@mortimer.gmerlin.de> X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-unknown-openbsd6.4) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; boundary="Sig_/iJgoNfg3Qjrn495zJfjKbgM"; protocol="application/pgp-signature" X-Provags-ID: V03:K1:gIXjvoF6chMCYkSkBy/U84xmEp0Hbwuj+wmYz1PafQVoBsiReOA mT7PJFLgc1z2w8UCLzHzlTcKj/8nbNPlrqKJWhhcKPfcNhBDNg5pMbQpSh28SxquqnPDP6n gJiXpodtJ3fc5gArTxLAvCvVk8rU97Q8rGcVcr3oH3YibU/8qRZR9sL8HrbyLA3LY3hKMYd Lax3e0aYqBspiVn3dV1qg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:1nJnZmj67+Y=:TfHGZGm0C+dL9b66h4SbWF nuwHFcNvSYhjCgAs14ejXdm6op0KeCnh0JPfjz26nbrT+3USKSbJexeZG+V6KNHhG3Ezdh2g2 z+WncXQalhTtGHsLntlAN3X8KtRcoHEWoCW6zJayQLB0NhlKfar8xna7j4UoBobxOLwGFrmKi y1X8SWBoW81cF8iUMifTuuDvoS/ObC90GMxSKw4HA7wvVUutkUzg9nh/VJOVGQ6nlTi/lhZ2M ejAfwEJLz9u8vyr9rXuktHgHmKutZ/zJxwZZcjN2TCWHENdptf208eBVmbq9qHMY4lIuQadkv PE7f8emOmO9xds+wpUOTOihw3TYkbMI2MNUKLe6Aknc4IcP6vDbeXzePndJiHP2dSHa4lrIin IAWf/kryoyrA/jadAFJqcegqEjwMKZRygIk+ql5naMcBbliN9zl9Cl83iv8xVxcbMGCX7S9xc zNahN+i45zs8LnpolCOIBO/m2kekgHGYUN9jxf5tyA4EtAD+i30Ja7Axp0yks6eMompZ9Svc2 VrUGiZDS/4L+RpF5MPgvC1FovTiUwX5epITUOb6z+jcJfgtaiOL+os6Ywguzo02uVOA+o+tg6 ijdZH1cCpOdTYUR+zKpqq72QV7IxKZk5z2fsfpdfUvWNB2JFMdJ0v60I30BYHIId1yAzP4tRU NemG3gvCBfJFOhg0H/tChRQESqwRUCYvPQsk/p0W0n+wfRWiUsy5C1bU964BImlnO+Pttg6Ae LP/gFvc/BPl8yY/9Wz1n1+9As4qkVSWtGLiDcToGa8kgkwcLH1HJjWKi0Ro= Subject: [Caml-list] How to narrow polymorphic variant phantom types --Sig_/iJgoNfg3Qjrn495zJfjKbgM Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable In the following simplified program I'm trying to use phantom types to express read / write / read_write permissions. This program fails at runtime in the call to Io.write. Is it possible to adjust the phantom types so that it fails at compilation time? I'd like to express a typing like val dup : 'a perm -> [< `Read | `Write > 'a] desc -> 'a desc but a type variable inside the polymorphic variant type is not allowed. module Io : sig type 'a perm constraint 'a =3D [< `Read | `Write ] val ro : [ `Read ] perm val rw : [ `Read | `Write ] perm type 'a desc constraint 'a =3D [< `Read | `Write ] val open_file : 'a perm -> string -> 'a desc val dup : 'a perm -> [< `Read | `Write] desc -> 'a desc val read : [> `Read ] desc -> string val write : [> `Read | `Write ] desc -> string -> unit end =3D struct type 'a perm =3D [ `Ro | `Rw ] constraint 'a =3D [< `Read | `Write ] type 'a desc =3D Unix.file_descr constraint 'a =3D [< `Read | `Write ] let ro : [ `Read ] perm =3D `Ro let rw : [ `Read | `Write ] perm =3D `Rw let open_file perm file =3D Unix.(openfile file [match perm with |`Ro -> O_RDONLY |`Rw -> O_RDWR] 0o000 ) let read desc =3D let buf =3D Bytes.create 10 in assert (Unix.read desc buf 0 10 =3D 10); Bytes.unsafe_to_string buf let write desc buf =3D let buf =3D Bytes.unsafe_of_string buf in assert (Unix.write desc buf 0 (Bytes.length buf) =3D Bytes.length buf) let dup desc =3D Unix.dup ?cloexec:None end let () =3D let fd_ro =3D Io.(open_file ro "/tmp/test") in let fd_rw =3D Io.(dup rw fd_ro) in Io.write fd_rw "Hello, World"; print_endline (Io.read fd_ro); --=20 http://gmerlin.de OpenPGP: http://gmerlin.de/christopher.pub CB07 DA40 B0B6 571D 35E2 0DEF 87E2 92A7 13E5 DEE1 --Sig_/iJgoNfg3Qjrn495zJfjKbgM Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEE+CT73l6XX3KFKq8nJS8PWAcyqzQFAlw67X8ACgkQJS8PWAcy qzSMCQ/6A38NVBOc9iO3xg7BUE+UfGyjZLDBPXFP5Orji5x3P9S+f4gR/Vu+0uKA F9KUDiLWIUkvPoQ/5J6+b6qV0iwDjK1IVVlKvdqv4jr1zBh5CHPCnSo8kCz/xkJq D35jyD0Kag8mkAzklJCKrVGVBfz10rf/jKOg0AzlmtC8AKnqphXPvfjH/qCC/WUP 6l2fpSlnCP3GIQDQfjFY28OAd7tkBTCLnRLX44mUZyfTAZQNfwJ0LHxzYKofoiPx KInPKhFG+pDczsRKM+I0BtuI8FakQyakFUABZL4asB5IUJn5XeNd6k5Pf7T7TyAh GPdQuvpJxD5kuRxv7QaWlXOc63g4v5LKNcetcvyYfD0WLHTqTMGicETiRU3l0ZpH nwDtk4JJtLgPcJRdBCx5Ri/c3hxaknZqv2Cq0yl+iMF3lCDujdEF+7QVNlQuHKlw cWTu7y7btt/qDA5S13c086bKZO7g4fcpygXWPDTIIXQm2sUwXPbzvtBS0WjQ7ylA 2xhH4Dh7ULxiUfOWcSmSn+YmI/cQ/qQGZmGlx5Lu424TxyrZ+Rsj7LGOpMOjMIXE lQUHgTjI9UMA/9oH4ERK7CPOyIWDw5DlWHTJkbFU2Phvu17LrZznSwRFqfUvB0ob fv1SNGXtkT6+7zRAQO0Rn0kHDsKquzaNy/5VHh+UeAohRiDBw7w= =mSXg -----END PGP SIGNATURE----- --Sig_/iJgoNfg3Qjrn495zJfjKbgM--