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 732E65D5 for ; Thu, 23 Aug 2018 09:16:04 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.53,277,1531778400"; d="scan'208";a="343473251" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 23 Aug 2018 11:16:03 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id F3D82824C9; Thu, 23 Aug 2018 11:16:02 +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 462CE82486 for ; Thu, 23 Aug 2018 11:15:54 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=rich@annexia.org; spf=Pass smtp.mailfrom=rich@annexia.org; spf=Pass smtp.helo=postmaster@annexia.org IronPort-PHdr: =?us-ascii?q?9a23=3ARb8q6xWVQ4Xsna1xIc830flvrH7V8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYYhOFt8tkgFKBZ4jH8fUM07OQ7/i/HzRYqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjWwba9wIRmssQndqtQdjJd/JKo21hbHuGZDdf?= =?us-ascii?q?5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2Ao/8LrrgXM?= =?us-ascii?q?TRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VDK/5KptVRTmij?= =?us-ascii?q?oINyQh/W/ZisJ+kr9VrhGuqBNj3oHbbpqYNOZicq7HYd8WWXBMUthXWidcAo28?= =?us-ascii?q?dYwPD+8ZMOpWs4f9pkcBrRukCgm2Gezk1z9HimXx06Egzu8vFQbG3Ao+ENIVvn?= =?us-ascii?q?jfsdL4NL0TUe+pzKnF1i/Mb/VQ2Tjj54nIcwoureuLXbJqfsrc0E8iHB7GgFWI?= =?us-ascii?q?sYHoPC+Z2v4MvmWY9eZtUf+jh3Q6pwxzozWiwNonhJPTiYIP0F/E8D10wIYrKt?= =?us-ascii?q?28T052ecSrEJ1Wty6EOIp2Q9ktT3tvuCYgxb0KoZ+7fC4Ux5Q73xPSaOCLf5KJ?= =?us-ascii?q?7x/gTuqcJSp0iGh4dL+9hhu+6U2gxff9Vsmw3lZKtC1FktzUu3AX1hzc9siHR+?= =?us-ascii?q?Bn8Uen3zaAyQ/S6uBeLkwukqrbMZEhzqYqlpUPqUTDAjP2mELugaCKbEok/+yo?= =?us-ascii?q?5/3jYrXnvZ+cK5R5ihr+M6QrgsywG/40MgkIX2iB+OSzzqfv/UPjQOYCsvpjma?= =?us-ascii?q?DctNXeJN8Hjq+/GQ5clIg5uDilCDLzmu4ZlnkONl4NR1SiycDLPFfDO7qwWe2+?= =?us-ascii?q?iFSEmTFtyuDHN/vmGJqbfSuLq6voYbsosx0U8wE0190Kv8sFWIFEG+r6XwrKjP?= =?us-ascii?q?KdCxY4NwKuxOO+U4d00IUTSWOGRKiDP/GL6APa1qcUO+CJIbQtlnPlMfF8vKzn?= =?us-ascii?q?i3k0iV4UO66z0slPMS3qLrFdO0ycJEHUrJIBHGMN51FsRershU2DWHhUfXngBq?= =?us-ascii?q?8=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CXBQCzen5b/7BbRFBbhAApPH8ogyiUe?= =?us-ascii?q?jYCARMBAQEBAQEGgTEBmB4LGxABh04aBgEENBQBAgEBAgEBAQEBbBwMgjUigw4?= =?us-ascii?q?TexMhLYNXgXQRo08zhGiFeIkfEQZ5PkmEJIVLhQsCiA6TDgcCAoFQhGCJMCKCB?= =?us-ascii?q?ow6kz+BWCGBUn0IgyQJgWcBiDCGMz4weQGNYAEB?= X-IPAS-Result: =?us-ascii?q?A0CXBQCzen5b/7BbRFBbhAApPH8ogyiUejYCARMBAQEBAQE?= =?us-ascii?q?GgTEBmB4LGxABh04aBgEENBQBAgEBAgEBAQEBbBwMgjUigw4TexMhLYNXgXQRo?= =?us-ascii?q?08zhGiFeIkfEQZ5PkmEJIVLhQsCiA6TDgcCAoFQhGCJMCKCBow6kz+BWCGBUn0?= =?us-ascii?q?IgyQJgWcBiDCGMz4weQGNYAEB?= X-IronPort-AV: E=Sophos;i="5.53,277,1531778400"; d="scan'208";a="276592816" Received: from annexia.org ([80.68.91.176]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES256-GCM-SHA384; 23 Aug 2018 11:15:53 +0200 Received: from rich by annexia.org with local (Exim 4.89) (envelope-from ) id 1fslia-0006Kt-7b for caml-list@inria.fr; Thu, 23 Aug 2018 10:15:52 +0100 Date: Thu, 23 Aug 2018 10:15:52 +0100 From: "Richard W.M. Jones" To: caml-list@inria.fr Message-ID: <20180823091552.vq5oizsushwfivgz@annexia.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) Subject: [Caml-list] Returning printf from a function Reply-To: "Richard W.M. Jones" X-Loop: caml-list@inria.fr X-Sequence: 17030 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: This is a problem we hit from time to time and I don't think I've ever really understood why it happens. This made up example shows the essence: ---------------------------------------------------------------------- let get_printer out = if out then Printf.printf else Printf.fprintf stderr let () = let printer = get_printer true in printer "hello\n"; printer "goodbye %s\n" "everyone" (* line 7 *) ---------------------------------------------------------------------- $ ocamlopt test2.ml File "test2.ml", line 7, characters 2-9: Error: This function has type (unit, out_channel, unit) format -> unit It is applied to too many arguments; maybe you forgot a `;'. Type inference in line 6 seems to overspecify the inferred type of printer, so that we get the error on line 7. Why? And how to fix it? Rich. -- 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