From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 585945D5 for ; Thu, 26 Apr 2018 14:18:44 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.49,330,1520895600"; d="scan'208";a="324607405" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 26 Apr 2018 16:18:42 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 3068E8244F; Thu, 26 Apr 2018 16:18:42 +0200 (CEST) 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 5788A82416 for ; Thu, 26 Apr 2018 16:18:39 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jun.lambda@gmail.com; spf=Pass smtp.mailfrom=jun.lambda@gmail.com; spf=None smtp.helo=postmaster@mail-vk0-f42.google.com IronPort-PHdr: =?us-ascii?q?9a23=3AkAfhQBIbmXDYoTEuntmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgRLfzxwZ3uMQTl6Ol3ixeRBMOHs6kC07KempujcFRI2YyGvnEGfc4EfD4+ou?= =?us-ascii?q?JSoTYdBtWYA1bwNv/gYn9yNs1DUFh44yPzahANS47xaFLIv3K98yMZFAnhOgpp?= =?us-ascii?q?POT1HZPZg9iq2+yo9JDffwtFiCChbb9uMR67sRjfus4KjIV4N60/0AHJonxGe+?= =?us-ascii?q?RXwWNnO1eelAvi68mz4ZBu7T1et+ou+MBcX6r6eb84TaFDAzQ9L281/szrugLd?= =?us-ascii?q?QgaJ+3ART38ZkhtMAwjC8RH6QpL8uTb0u+ZhxCWXO9D9QKsqUjq+8ahkVB7oiD?= =?us-ascii?q?8GNzEn9mHXltdwh79frB64uhBz35LYbISTOfFjfK3SYMkaSHJBUMhfVCJPH52y?= =?us-ascii?q?YJcUAuodIepVtZXxq0cSoRa8AwSnGePhyiVPhn/zxaA01/khEQfb1wIjGdIOt2?= =?us-ascii?q?nUo8voP6oVU+C10a/IwS/Hb/xM3Dfy85XHfQo6rPGDWLJ/a8vRyU01GwzZiVWQ?= =?us-ascii?q?rJXoMjWI3eoDtGib6vBvVeOpi2M/pAFxoySvxscxiobSnI4Vy1fE+CNky4g2Pd?= =?us-ascii?q?21UFB3bcKgHZdKtCyXN5F6Tt0/T2xmoio3xaMKtJimdyYQ0psn3QTQa/mffoiI?= =?us-ascii?q?/B3jUOGRLC99hH1/ebK/gw++8VajyuHgT8W03llHojRfntnDsXAN0BPT6syZRf?= =?us-ascii?q?dn4kih3jOP2xjS6uFCP080ibLWJ4A9zrM0jJYeskTOEjXolEnrgqKabEop9vaw?= =?us-ascii?q?5+TieLrmp5ucN4FuigH5N6Qjgs6/Afk+MgQUW2iU4+G826b+8kLjW7hKgfg2nb?= =?us-ascii?q?PYsJDeP8gUuqm5AwpN3oY59xm/Fyum0MgfnXQfMF1KYheHj4zwN1HKIfD4Fuu/?= =?us-ascii?q?jk+3kDZrwvDGJqfuDo/MLnjFirfhfKxy51RSyAopnphj4MdfA7QFaPbyQVO54N?= =?us-ascii?q?fRCxt8Nw2v387mDs9838UQQzTcLLWeNfbwrFnAx+QoPuTEMI0IvnD5Iv0v6/fG?= =?us-ascii?q?gnowmFtbdq6si8hEIEukF+hrdh3KKUHnhc0MRCJT5lJnHb7azWaaWDsWXE6cGq?= =?us-ascii?q?c15zU1EoWjVN6RSYWkgbjH1yC+TMQPOjJ2T2uUGHKtTL2qHu8WYXvLcMBkmz0A?= =?us-ascii?q?E7OmTt15jEz8hErB07Nia9Hs1GgYuJbkjoUn4uTSkVQs9mQxAZjHlW6KSG5wky?= =?us-ascii?q?UDQDpkhK0=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DMAgBU3+FahirVVdFbHgEYBoNbATx6K?= =?us-ascii?q?AqDYYNtkQyBdoENh1aLUYFkCwUehEUCgkAHGQcBBDQUAQIBAQEBAQEBAQETAQE?= =?us-ascii?q?BCAsLCCgjDII1JAGCcgQZARseAxIQDwImAiQBEQEFASKFCQEDFQ+YboMdPIsFg?= =?us-ascii?q?WkWBQEXgnAFg08KGSYNVFeCPQIGEneHCIITg2yDNAsCAoEmgziCVAKHEoVdixo?= =?us-ascii?q?IhWOIZYFximSJPYZvDwMegQQzgXNNI1AxghIJgiWDToJkgTyGQTAwkSwBAQ?= X-IPAS-Result: =?us-ascii?q?A0DMAgBU3+FahirVVdFbHgEYBoNbATx6KAqDYYNtkQyBdoE?= =?us-ascii?q?Nh1aLUYFkCwUehEUCgkAHGQcBBDQUAQIBAQEBAQEBAQETAQEBCAsLCCgjDII1J?= =?us-ascii?q?AGCcgQZARseAxIQDwImAiQBEQEFASKFCQEDFQ+YboMdPIsFgWkWBQEXgnAFg08?= =?us-ascii?q?KGSYNVFeCPQIGEneHCIITg2yDNAsCAoEmgziCVAKHEoVdixoIhWOIZYFximSJP?= =?us-ascii?q?YZvDwMegQQzgXNNI1AxghIJgiWDToJkgTyGQTAwkSwBAQ?= X-IronPort-AV: E=Sophos;i="5.49,330,1520895600"; d="scan'208";a="324607385" Received: from mail-vk0-f42.google.com ([209.85.213.42]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 26 Apr 2018 16:18:38 +0200 Received: by mail-vk0-f42.google.com with SMTP id t63so5295587vkb.1 for ; Thu, 26 Apr 2018 07:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=Tn6faGhC83O5vp85KIRSK9aeqKiv7lwF4KmYACKX+9A=; b=bXXrIZpZNlQb6XDBVVICneU8jVWrKXd767cSkWfFCmgWKuuYjan8RyEA5hMXgCsOos JSTYGawetbfNXhNyZKjBFFLD+ehf6BU+ophu+1O68uiBNPabe9pKy/UzseWaItZvBnbW 27+EX5N4eP88p0r2GEPENoY7e9EvlgV0XlqNU3vQEA+/6lBaPuGp/yPpqk17a77mcwSN YVrDsIPJWZk/XA5lX/yMg2UygTF5rHzGSGJ98MoSvVQWz0sr684tp96GNuPY1RLcEwQy ijjVuLDmbnb/+yBN5tXaF513Sew4gi3L6Qe3jxi3eA/BtN1tT+6xPj317XOnQR6BUJWv zRDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Tn6faGhC83O5vp85KIRSK9aeqKiv7lwF4KmYACKX+9A=; b=KyAL1kWiGZYAx7beMhAgdjQAWhjrxH3mDd/rfrw75l4qchPWenYUphfS/q5NhaMCpA ZUaHVaJTy/b7jxwJf2ZdtfM0MScuKntd2mvq8yQlj3ok3Virw7L/g68P5NP61fw1tBcg VCTy50BrmU6RvR7lEevlr9Eyhm5kUizIPuBDKai0hqv9qz82JAUTvuH7mDCGmVEgv5zM An6MShIwfy9mQI0/jXB5R1aHjn5lrW8Yi4jh6MECIfKXw3AI0AJwE7cZlc6aS9/kIG+M Iel1WedWKPFRKd50xevJUGDV1b1llUvXXKc88pWaNdMwKcXXX0LSHFHiZJsv1ajhoM0+ MN0Q== X-Gm-Message-State: ALQs6tCu1T0Q027ViFTLNQ1nWVx0I1n1galZE1lVux5l5m72UPVN5nE5 Dz5hynEqnKQgCOzKniNExidksSm5WGhaq8ixMs+S2Q/o X-Google-Smtp-Source: AIpwx4/RSFFZYesrJxIMcbQCcioXxAjdqkEx+gOH+CUqc5H6akIKSEhYJerQ9rJApMUGsnHROjh/MQIY5VtL2uRB03w= X-Received: by 10.31.41.201 with SMTP id p192mr23073306vkp.1.1524752317209; Thu, 26 Apr 2018 07:18:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.68.25 with HTTP; Thu, 26 Apr 2018 07:18:06 -0700 (PDT) From: Jun Inoue Date: Thu, 26 Apr 2018 23:18:06 +0900 Message-ID: To: caml list Content-Type: text/plain; charset="UTF-8" Subject: [Caml-list] Type That's Concrete From Within A Library Abstract From Without Reply-To: Jun Inoue X-Loop: caml-list@inria.fr X-Sequence: 16852 Errors-to: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Dear list, Is there a way to make a type concrete inside a library, yet opaque to library users, preferably in a way that works with -pack? This is a nagging issue in our sundials package (http://inria-parkas.github.io/sundialsml/). Basically, we have a type declared in one module of the library that is pattern-matched upon in other modules, like: (* private.ml *) type opaque_type = Foo | Bar (* public.ml *) let f : opaque_type -> int = function | Foo -> 0 | Bar -> 1 There are a few constraints: - We don't want users to be able to pattern-match on opaque_type. - We need multiple modules in the library to pattern-match on opaque-type (so moving opaque_typ e to public.ml is not an option). - To avoid namespace pollution, we want to pack the whole library (with ocamlc -pack) as a single Sundials module, so the user sees a Sundials.Public module instead of just Public. Is this possible? Right now, we just collect public.cmo and private.cmo into sundials.cma and throw away private.cmi. But this doesn't work with packing: $ ocamlc -pack -o sundials.cmo private.cmo public.cmo demands that there be a private.cmi. -- Jun Inoue -- Caml-list mailing list. Subscription management and archives: https://sympa.inria.fr/sympa/arc/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs