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 ESMTP id 14E605D5 for ; Thu, 26 Apr 2018 14:28:34 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.49,330,1520895600"; d="scan'208";a="324609556" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 26 Apr 2018 16:28:33 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 9344382442; Thu, 26 Apr 2018 16:28:33 +0200 (CEST) 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 E2F3F82416 for ; Thu, 26 Apr 2018 16:28:22 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mmatalka@gmail.com; spf=Pass smtp.mailfrom=mmatalka@gmail.com; spf=None smtp.helo=postmaster@mail-lf0-f41.google.com IronPort-PHdr: =?us-ascii?q?9a23=3AScxsphcpOKmjxm5/Byx8IpIhlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcS7bB7h7PlgxGXEQZ/co6odzbaO6Oa4ASQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9HiTahb75+Ngm6oRnMvcQKnIVuLbo8xAHUqXVSYe?= =?us-ascii?q?RWwm1oJVOXnxni48q74YBu/SdNtf8/7sBMSar1cbg2QrxeFzQmLns65Nb3uhnZ?= =?us-ascii?q?TAuA/WUTX2MLmRdVGQfF7RX6XpDssivms+d2xSeXMdHqQb0yRD+v9LlgRgP2hy?= =?us-ascii?q?gbNj456GDXhdJ2jKJHuxKquhhzz5fJbI2JKPZye6XQds4YS2VcRMZcTyJBDY28?= =?us-ascii?q?YYUREuQOP+hWoYryqFQStha+GRWgCfnzxjNUnHL6was32PkhHwHc2wwgGsoDvn?= =?us-ascii?q?POo9XxKKgSVuS1zKzVxjvEdfxWxS3y6IzLch87vPqBWrdwcc/LxkkzDQzFilaQ?= =?us-ascii?q?ppb+MjOa0+QCqWmb7+56We2zjG4nrhh8rz6yzckijYnJg5gaylHC9Shhz4Y1JM?= =?us-ascii?q?G4SE5mYdG/CpdQtiaaOo1rSc0hW2FloDg2xqECtJKhfyUHyI4rywDCZ/GHaYSF?= =?us-ascii?q?7Q/vWP6MLTtkgH9pYqyzihix/ES61+HxWMi53ExLoydKlNTHq2oD2AbJ6sedT/?= =?us-ascii?q?tw5keh1iiL1wDU8uxEJFo7lavfK5I4xr4wmIYfvV3NHiL5hUn6lqCWdkIj+uin?= =?us-ascii?q?7+TofK/qqYObN49xkg3+M6IuldKjAekgLAQCQ2yW9f6/2bDj50H1XqhGg/0snq?= =?us-ascii?q?TWrZzWPcEbqbS4Aw9R3IYj8RG/DzK+3dQdmHkINk5FdwiDj4jqIV7DO//4DfKl?= =?us-ascii?q?jFStlDdn3ezJPrrkApnVNHjMjK/hfaph605b0Ac80cpQ55dQCr0YJPLzW1TxtM?= =?us-ascii?q?DDAx8iMw20xv7nB89n2oMfX2KPGK6ZP7nIvV+G/OJ8a9WLMa0Ivn7cLf846ra6?= =?us-ascii?q?j2I/31sUeKOl1LMYbXm5GrJtJEDPMlT2hdJUNG4OtQ06SaTPgUGLVT1aLyK3Wq?= =?us-ascii?q?sg7zU4AaqpCI7CQsamh7nXj3TzJYFfem0TUgPEKnzvbYjRHq5UMHvDcP8kqSQN?= =?us-ascii?q?UP2ac6Fk0BivsAHgzL8+d7jb/yQZsdTo090nvrSPxyF3ziR9CoGm60/IV3t9xz?= =?us-ascii?q?paSDo/3aQ5qkt4mA/ajPpIxsdAHNkW3MtnFwc3MZmGkr5/AtH2HwbPJpKHFA/g?= =?us-ascii?q?TdKhDjU8CNk2xo1Wbg=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AiAQCu4eFafynXVdFbHgEGDIQkgQ8Tj?= =?us-ascii?q?EuMGYF0AoENkyeBZAsjCYRAAoJDGQcBBDQUAQIBAQEBAQEBAQETAQEJCwsIJiU?= =?us-ascii?q?MgjUkAYJJAQICAScZARsdAQMBCwYFCxYlDwERAhEBBQEcBhOEdgEDDQgEC5wVP?= =?us-ascii?q?IxuFgUBF4JwBYFjgWwKGSYNVFeCPQIGCQEIhwN8gVQ/g2wugk83CwICgSaGDAK?= =?us-ascii?q?HEpBLLAiFY4Vogn2BcYVOhRaJPUWGEgYCCQcPIYEEM4FzMxoIGxU7DQ0XghIJg?= =?us-ascii?q?guDaIJkgTyGNG13Hg2QCgEB?= X-IPAS-Result: =?us-ascii?q?A0AiAQCu4eFafynXVdFbHgEGDIQkgQ8TjEuMGYF0AoENkye?= =?us-ascii?q?BZAsjCYRAAoJDGQcBBDQUAQIBAQEBAQEBAQETAQEJCwsIJiUMgjUkAYJJAQICA?= =?us-ascii?q?ScZARsdAQMBCwYFCxYlDwERAhEBBQEcBhOEdgEDDQgEC5wVPIxuFgUBF4JwBYF?= =?us-ascii?q?jgWwKGSYNVFeCPQIGCQEIhwN8gVQ/g2wugk83CwICgSaGDAKHEpBLLAiFY4Vog?= =?us-ascii?q?n2BcYVOhRaJPUWGEgYCCQcPIYEEM4FzMxoIGxU7DQ0XghIJgguDaIJkgTyGNG1?= =?us-ascii?q?3Hg2QCgEB?= X-IronPort-AV: E=Sophos;i="5.49,330,1520895600"; d="scan'208";a="263412725" Received: from mail-lf0-f41.google.com ([209.85.215.41]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 26 Apr 2018 16:27:59 +0200 Received: by mail-lf0-f41.google.com with SMTP id m18-v6so13753613lfb.0 for ; Thu, 26 Apr 2018 07:27:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=26OJZHnkRB3uh2g/GR4RhzQ1IoMjwEputf+0dzR0Tas=; b=BQmxrktHQvuxN5vWwEaMekT0c0ITE+vDF20+zx98K5VsYiNhSAQQCo6KxwAIzMnzZa 0IwUIdYOdvd8Dn8LbsjTQX0HnrOvhEMOhZBu/GTzqZfZU/qX6Kut4ciDNCY0DVZPGwop MoPrDmhu2ZJjz+qRVbY+Hvtu2/3uFTrdURuXfpEZscpkqv51L4NGonTsEzVxID9Y3Wiq TbpIEbOVSLQHuiHN5sCdVYf50ZH6hKHjhJxtDZ6LkJSM5DBiHq5aYotkDOqxe3CaPgTZ 7NxbU/v9PYRX6zsLGO9HqTaBDGMFu05LtomGWYWUbLITOHNur9lxjkFUEs6tFufiAx/F iWIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=26OJZHnkRB3uh2g/GR4RhzQ1IoMjwEputf+0dzR0Tas=; b=V9DBCKrUqbdEjeQPJgpjbzz4YIgYtZygbq1+pbQ8EKvc12G7Sv5vcajnUezUAIvbWh bxgPjlmtE0J1GkxQy7718lSuJK9lDZSXSxJMxMOUmIOyOjgifvenoD+EGUAoxzKaB+4A Jb6xGhRgmpbhty4/ThtztDTpWt/3O84FuCje92GpRgVV2r1NnkUCRkLhXx0Zs5bpzVP/ j/GwS6ZEyWUrnc6d2vQ7sQ7UbvM/sf54RWO9iaHPYi5tmROgBqdZ3cY5wJVHdzF60UMA 4FvdF9pcjcTyE6hfg1nfIcAu+BwQ6ClaQET5AY7gzVyhbjBEygraAdTwAgfL80sOS9g1 vNrQ== X-Gm-Message-State: ALQs6tCKzitnRw1SqmJO+pGFfZEo7nqjYuhQBPBh7p1Fw2AZpMzmQ54y YPfvl26HrsEfVFp8rqM7E7g= X-Google-Smtp-Source: AIpwx49FB4Z7z7f1h3kHNj1io6dSHcJyaehoBYRTkM9eE2BIHWcVqd9bjKY/uDu2NMTTRpfWFEbe0A== X-Received: by 10.46.53.11 with SMTP id z11mr24051422ljz.95.1524752878727; Thu, 26 Apr 2018 07:27:58 -0700 (PDT) Received: from localhost (customer-109-238-136-64.stosn.net. [109.238.136.64]) by smtp.gmail.com with ESMTPSA id p20sm2347725ljj.23.2018.04.26.07.27.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 26 Apr 2018 07:27:57 -0700 (PDT) References: User-agent: mu4e 1.0; emacs 25.3.1 From: Malcolm Matalka To: Jun Inoue Cc: caml list In-reply-to: Date: Thu, 26 Apr 2018 16:27:57 +0200 Message-ID: <86y3ha2gb6.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Caml-list] Type That's Concrete From Within A Library Abstract From Without Reply-To: Malcolm Matalka X-Loop: caml-list@inria.fr X-Sequence: 16853 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: Jun Inoue writes: > 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 > Doesn't using .mli files do exactly what you want? (* public.mli *) type opaque_type val f : opaque_type -> int (* public.ml *) type opaque_type = Foo | Bar let f t = .... > 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