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 E10465D5 for ; Thu, 21 Feb 2019 09:23:12 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.58,394,1544482800"; d="scan'208";a="370287021" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 21 Feb 2019 10:23:11 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 8571A7F61F; Thu, 21 Feb 2019 10:23:11 +0100 (CET) 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 359E97F61F for ; Thu, 21 Feb 2019 10:23:04 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=mmatalka@gmail.com; spf=Pass smtp.mailfrom=mmatalka@gmail.com; spf=None smtp.helo=postmaster@mail-lf1-f52.google.com IronPort-PHdr: =?us-ascii?q?9a23=3A5iji+hfkNSXLDPmxvuaWm8DTlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcu8bB7h7PlgxGXEQZ/co6odzbaO4+a4ASQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9HiTahYr5+Ngm6oRnMvcQKnIVuLbo8xAHUqXVSYe?= =?us-ascii?q?RWwm1oJVOXnxni48q74YBu/SdNtf8/7sBMSar1cbg2QrxeFzQmLns65Nb3uhnZ?= =?us-ascii?q?TAuA/WUTX2MLmRdVGQfF7RX6XpDssivms+d2xSeXMdHqQb0yRD+v6bpgRh31hy?= =?us-ascii?q?cdLzM2/mHZhNJtgqxVoxyuqABwzpXIYI2JLvdyYr/RcMkGSWdHQ81fVzZBAoS5?= =?us-ascii?q?b4YXCOQOJ+JYoJX6p1sKqBu1GA6iC/nzyjBSgn/23rc12PkmHAHD2QwvBc4Ov2?= =?us-ascii?q?7QrNX2LqgfSu+1zKzSwjXCa/Nawyvy6I/Nch04p/yHQLx+cc3UyUY1FgPFiE2d?= =?us-ascii?q?qZL/MDOPzOgNsm6b7/ZmWOmyiGAnsxl8riazysookIXEhYIYxkrZ+Sh4wos5P9?= =?us-ascii?q?21RFBjbdK5DJddszuWO5V4T84hWW1kpSg3x7wctZO6cyUHzoksyQTFZPydaYeI?= =?us-ascii?q?5wruVOaPLjd8g3JoYLe/iAyz8Uik0+H8Use03EtToipLktTAqGoB1xPU6siARf?= =?us-ascii?q?t9+lmu1SyT2ADU7+FIOUE0lazFJJ492rM8iIYfvEDZEiL1mEj6lrKae0Qm9+Sy?= =?us-ascii?q?6+nrfK3qppqGOI91jgH+PL4umsu6AekgNwgOWnKU+fim273n/k32Wq5HjvIzkq?= =?us-ascii?q?bDsZDaId4XqbK+Aw9Qyooj8QqwDy+60NQEmnkKNE5KdwiCj4jtIl3OJPH4Deyj?= =?us-ascii?q?g1m3izdqx/XGPqX7DZnXL3jDlq3hfbdn5EJGxgoz14MX25UBAbgEJLruQULrr5?= =?us-ascii?q?SMBRY8N0mwwv37INR7zIIXH2yVVPy3KqTX5HqB4ukoJ+zEQYYJsTL+IrBx4vvn?= =?us-ascii?q?kXY9mlY1cqyg3J9RY3e9SKc1a36FaGbh149SWVwBuRAzGbSz2Q+yFAVLbnP3ZJ?= =?us-ascii?q?oSozQyCYaoF4DGH9n/j7mI3SP9FZpTNDkfVgK8VEzwfoDBYM8iLTqIK5Y4wDMB?= =?us-ascii?q?XLmlDYQm0EP27VKo+/9cNuPRvxYgm9fj2dxyvbCBkBgz8XlwAZ3Y3TzXCW5zmW?= =?us-ascii?q?wMSnk926Ut+UE=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BEAAAObW5chjSnVdFkHgEGBwaBUwcLA?= =?us-ascii?q?YJqgSqNAIsJjDyEWokVgXsLAQEFFhGIOBoHAQQyBw0BAwEBAgEBAQEBEwEBAQg?= =?us-ascii?q?LCwgpIwyCOiKDHBkBGx4DEhAWNAETEQEFASKDMwGBWQEDFQShRjyMFxYFAReCe?= =?us-ascii?q?QWCRoF3ChknDV+BNwIGCQEIjDYXgUA/jwQCo1EJgXeFR4sgGYFiiHGIN5xPBgI?= =?us-ascii?q?JBw8hgS0JgX4zGggbFWyCOwmCExqDVIJfh3U+M4ECJhOOUAEB?= X-IPAS-Result: =?us-ascii?q?A0BEAAAObW5chjSnVdFkHgEGBwaBUwcLAYJqgSqNAIsJjDy?= =?us-ascii?q?EWokVgXsLAQEFFhGIOBoHAQQyBw0BAwEBAgEBAQEBEwEBAQgLCwgpIwyCOiKDH?= =?us-ascii?q?BkBGx4DEhAWNAETEQEFASKDMwGBWQEDFQShRjyMFxYFAReCeQWCRoF3ChknDV+?= =?us-ascii?q?BNwIGCQEIjDYXgUA/jwQCo1EJgXeFR4sgGYFiiHGIN5xPBgIJBw8hgS0JgX4zG?= =?us-ascii?q?ggbFWyCOwmCExqDVIJfh3U+M4ECJhOOUAEB?= X-IronPort-AV: E=Sophos;i="5.58,394,1544482800"; d="scan'208";a="370286924" Received: from mail-lf1-f52.google.com ([209.85.167.52]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 21 Feb 2019 10:23:03 +0100 Received: by mail-lf1-f52.google.com with SMTP id e27so19813931lfj.8 for ; Thu, 21 Feb 2019 01:23:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=user-agent:from:to:subject:date:message-id:mime-version; bh=AHpsTMCHQ/GyVwuK1pwFT3qpEEmrprBwEltI1yclsRI=; b=Bo2RF0HvPKrzJejWV/U6Mojn4QVAelDVc/m1+t27BiJXRvtTc6iUW+0yOYltw4nhpX Z+DfPqJAtMg9EEf5ZjpXDelS5Da9rUEjbh/uNHZ0etIPzSVKMGcS3sVizTkH5i+va+Lx W2+CWrnS75A1aSqOVsMl7F0Qhh9Q4IgPqCWIdkHYTnMyldzC/4r/D2YZWTOh1DU7Jej9 2H6oU2UsyKI91JI1Io/Ao8rKGLBi3DEQUuBFpPEKxM2IiQ0TF6B1ST6RhRdrj824SdQ0 jpRKYwNaMfdj4MX0gZDTMte10idSC0IKN9QnVK2kBNFm72o3ntPM0jNlnVJUxiMqKHzU owrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:user-agent:from:to:subject:date:message-id :mime-version; bh=AHpsTMCHQ/GyVwuK1pwFT3qpEEmrprBwEltI1yclsRI=; b=Z/xlVTgax60ZyV7YPY0+R/bh9qTjKbTcBckFQiHuGhJHVWKnvvoPsVqoLmLCSJ8q8v BhvV5kon5DHIgUPTtNlDr9msmeGY49NSWno36joZk3ZgfPx80ahk16wCWgb+KDXAcpWH 74HORN/hUiUjabdH9N8/M09zlFSW7Fue9MmydVEugg61cAvVqUaup/eHN16FcS+3cJ1c w2in7+BtLOiiSh/eP8jxWWbiKHM9873j7OYygaQAaUPqKPoC1a0nLsWbSlsN9s8gqc7n iKgSo0YsDki+5ckLpbxKNhtQE9omF3Us6SVAvdSgioZw1tAGP3Ck0TnXnvScL7M+yJld GKTQ== X-Gm-Message-State: AHQUAuaEIxN5c9pqTrDDoOm3NCfM8zm/8T/kWilWJBUJlF4jE92MhX1j 509GPj5+8aujY+DRMXwv+BUx03S8 X-Google-Smtp-Source: AHgI3IZmhESwBJ6FOJuXnvJtUF17toYNZiXDZc7tTHgmhdjxdIuuilyFVIxq3+GHdMvx4lJNWwV+ag== X-Received: by 2002:a19:a353:: with SMTP id m80mr14305451lfe.65.1550740981903; Thu, 21 Feb 2019 01:23:01 -0800 (PST) Received: from localhost (customer-109-238-136-64.stosn.net. [109.238.136.64]) by smtp.gmail.com with ESMTPSA id b191sm5888907lfd.56.2019.02.21.01.23.00 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 21 Feb 2019 01:23:01 -0800 (PST) User-agent: mu4e 1.0; emacs 26.1 From: Malcolm Matalka To: caml users Date: Thu, 21 Feb 2019 10:23:00 +0100 Message-ID: <86o975a423.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Caml-list] How is this type inferred? Reply-To: Malcolm Matalka X-Loop: caml-list@inria.fr X-Sequence: 17360 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: I wrote a typed SQL interface where the usage is something like: let sql = TS.(sql / "SELECT foo FROM bar WHERE x =" /% Var.int /^ "AND" /% Var.string) And then one can gets a value back of type: (int -> string -> '_weak4, '_weak4) Sqlite_io.Typed_sql.t And the type of all of that is: type ('f, 'r) t val sql : ('r, 'r) t val (/^) : ('f, 'r) t -> string -> ('f, 'r) t val (/%) : ('f, 'a -> 'r) t -> 'a Var.t -> ('f, 'r) t My question is: How is the type of 'f inferred in there? I managed to get this working by cobbling together a bunch of things I didn't quite understand and now I'm trying to figure it out. Thanks, /Malcolm