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 49CC67EF5E for ; Fri, 15 Jul 2016 21:52:25 +0200 (CEST) IronPort-PHdr: 9a23:HSxB4xbnM5M8pqg+Iw2OoSD/LSx+4OfEezUN459isYplN5qZpcu6bnLW6fgltlLVR4KTs6sC0LuO9fy8EjVbvd6oizMrSNR0TRgLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpQAbFhi3DwdpPOO9QteU1JXvkbzusMSIP01hv3mUWftKNhK4rAHc5IE9oLBJDeIP8CbPuWZCYO9MxGlldhq5lhf44dqsrtY4q3wD89pozcNLUL37cqIkVvQYSW1+ayFmrPHs4CjEUQKKrlEVSGMRg1IcEg/Z5RTwV433tTrSue902S3cNsrzG+MaQzOnuoVmUhLtmW82Pjo993mf3t15iKZcuDquohV+x8jfZ4TDZ6k2Rb/UYd5PHTkJZc1WTSEUR9rkN4Y= Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=yallop@gmail.com; spf=Pass smtp.mailfrom=yallop@gmail.com; spf=None smtp.helo=postmaster@mail-qt0-f176.google.com Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of yallop@gmail.com) identity=pra; client-ip=209.85.216.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="yallop@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of yallop@gmail.com designates 209.85.216.176 as permitted sender) identity=mailfrom; client-ip=209.85.216.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="yallop@gmail.com"; 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@mail-qt0-f176.google.com) identity=helo; client-ip=209.85.216.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="postmaster@mail-qt0-f176.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AmAQDFPYlXhrDYVdFdhBR8BrprIoV4AoEoBzwQAQEBAQEBAQERAQEBCAsLCSEvgjIEARIBghMBBRIRHQEbHQEDDAYFCw0CAiYCAiEBAREBBQEcBhMbB4dzAQMXDqMlgTE+MYs7gWqCWgWEXwoZJw1Sg0gBAQEBBgEBAQEBGgIGEHGJdoJDgVqDJIJaBZhtNIYThjGCF481iCKGOhIegQ81gjuBWDsyhjWBQwEBAQ X-IPAS-Result: A0AmAQDFPYlXhrDYVdFdhBR8BrprIoV4AoEoBzwQAQEBAQEBAQERAQEBCAsLCSEvgjIEARIBghMBBRIRHQEbHQEDDAYFCw0CAiYCAiEBAREBBQEcBhMbB4dzAQMXDqMlgTE+MYs7gWqCWgWEXwoZJw1Sg0gBAQEBBgEBAQEBGgIGEHGJdoJDgVqDJIJaBZhtNIYThjGCF481iCKGOhIegQ81gjuBWDsyhjWBQwEBAQ X-IronPort-AV: E=Sophos;i="5.28,369,1464645600"; d="scan'208";a="226832429" Received: from mail-qt0-f176.google.com ([209.85.216.176]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 15 Jul 2016 21:52:24 +0200 Received: by mail-qt0-f176.google.com with SMTP id j35so65003260qtj.2 for ; Fri, 15 Jul 2016 12:52:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=o6AgPWrQ2wzMT5JSt36MnmDOrN9zVfJ0rxzN2ujVPuU=; b=NarpugSo4qtBGvEN7cKHY/XtAGzQcDMcUoUNE1SvLi2CEzFO5rUKDAR/DW2w7a4O+2 WDMPW27wjkTnWDbz8dmtYAVjC5CqXc4BGHfcuACy0oWoof3bxvEgw7SLch+e/IlHXS3M 6rdeduOjRDpf0PobL5n1zyy9fOXMADVPFKT2K9AtWr9GiP6BimRR8AfF0QLCmVdWeSs9 E1cEIRML3DnxJ/GnPaRyQvQVwovY6IWCStJcW6IqUvzeqluHd40+Moo4bVD1Jvg1uV4r F9OVgwPIQFyAnyBCcs50ml4Z43CgmqPhkJyhL5I+LmKuWzOtVwyonnRiwLQhz1CzI+61 jogA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=o6AgPWrQ2wzMT5JSt36MnmDOrN9zVfJ0rxzN2ujVPuU=; b=Qi7MKbTz9Hzj9X2BozcItqHN7YrJj/tMUjkZ5oTWouNp0XqzVzp47l78vcp6O93b4J eeqkpEDHWUFId/uzMUlTRLeLYjIKbQPRLVQS96Ndx2/a0rtWMNW4O7vDhugqvKAz4x3K XHMXF71+VoHFHs621uRV0Oy8Y77DcpkeUgbob5/hSfwmdsd1vLM/NreXYxwRHTvcpqM1 1FXh+EgXiMjIkxJJgyk/YmPv6QkXuDd2FEx91uV/tVc8ohCInTec1h6NwXywCPrs0DaE 5fd0ym3h8WSCzxNvMUiAF9pTSxeLPsbCcVizST7S3P+pyZOxDIVGhP6TZ26+BnDQQ9SK of9A== X-Gm-Message-State: ALyK8tI3PAAaYN7tEl4WC5dCtx9sZEfP+WxpMVzIXqhOKJot0BcursSqIacs69LhVxTxmulTmSOiiEBJe+iLdw== X-Received: by 10.237.59.79 with SMTP id q15mr2674251qte.77.1468612343351; Fri, 15 Jul 2016 12:52:23 -0700 (PDT) MIME-Version: 1.0 Received: by 10.55.115.2 with HTTP; Fri, 15 Jul 2016 12:52:22 -0700 (PDT) In-Reply-To: <-1959624052697932351@unknownmsgid> References: <001701d1daa2$30f7ac30$92e70490$@metastack.com> <1468179914.25014.89.camel@e130.lan.sumadev.de> <20160714090300.GB21053@frosties> <002601d1de7e$9f5776d0$de066470$@metastack.com> <20160715161308.GB30333@topoi.pooq.com> <6650375677998504317@unknownmsgid> <-1959624052697932351@unknownmsgid> From: Jeremy Yallop Date: Fri, 15 Jul 2016 20:52:22 +0100 Message-ID: To: Yotam Barnoy Cc: "Hezekiah M. Carty" , Hendrik Boom , Ocaml Mailing List Content-Type: text/plain; charset=UTF-8 Subject: Re: [Caml-list] Warnings opening modules (was: why is building ocaml hard?) On 15/07/2016, Yotam Barnoy wrote: > On Jul 15, 2016, at 3:26 PM, Hezekiah M. Carty wrote: > > On Fri, Jul 15, 2016 at 2:58 PM Yotam Barnoy wrote: > > > > On Jul 15, 2016, at 2:09 PM, Jeremy Yallop wrote: > > > > > On 15 July 2016 at 17:57, Yotam Barnoy wrote: > > > > > In haskell, I can just say 'import A (foo, bar, baz, t)' to limit > > > > > exactly what I want to import. This is because haskell has a > > > > > half-baked module system that isn't nearly as powerful as OCaml's, > > > > > which allows it to create syntax that doesn't need to go anywhere but > > > > > at the toplevel. > > > > > > > > > > We need this functionality in OCaml, but the closest thing is to say > > > > > 'include struct let foo = A.foo let bar = A.bar let baz = A.baz type t > > > > > = A.t end' > > > > > > > > This can be written more succinctly: > > > > > > > > let foo, bar, baz = A.(foo, bar, baz) > > > > type t = A.t > > > > > > Ok I have to admit that's pretty convenient. > > > > > type t = M.t does not bring M.t's constructors into scope. ppx_import ( > > https://github.com/whitequark/ppx_import) can help with this if you don't > > mind preprocessing. > > That's a great point. Without that last bit of functionality, this isn't > really a solution to the problem. The Haskell example you gave: import A(T) doesn't bring T's constructors into scope, either; it needs to be written like this: import A(T(..)) In OCaml you can bring A.t's constructors into scope by repeating the definition: type t = A.t = T of int