From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=GnC4Y8T6; dkim=pass (2048-bit key; secure) header.d=mpi-sws.org header.i=@mpi-sws.org header.a=rsa-sha256 header.s=mail202309 header.b=Uc4wHIH3; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 23F29400A3 for ; Tue, 3 Jun 2025 09:12:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:content-transfer-encoding:mime-version:date: message-id:to:subject:reply-to:sender:list-id:list-help: list-subscribe:list-unsubscribe:list-post:list-owner: list-archive; bh=mecyG4joGm/ZAzrZch/gK9DFDpzJM8khcYYrOWkE2Xc=; b=GnC4Y8T6zTTOlPc7pdIU7B5cvJagwbzB6nEyKsx8RdbsyIfjhqP3wAPF De+zIftcbAzWp4D4szrAt2UbHATODdBL6tSyA5x6Qh0t1ecf2M9/M6G4Q tTSm9Y4476rCuGL9QhA77CBnyfmLjpRDkOYuSZcuIMmungwHrA70GC39g 8=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=pass (signature verified) header.i=@mpi-sws.org X-IronPort-AV: E=Sophos;i="6.16,205,1744063200"; d="scan'208";a="225021719" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 03 Jun 2025 11:12:10 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 2AFE3E01A8; Tue, 3 Jun 2025 11:12:10 +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 E87FAE0157 for ; Tue, 3 Jun 2025 11:12:07 +0200 (CEST) IronPort-SDR: 683ebc67_j3E1ZTQAffChwOkSzX3GwoTBhvck9qDIIEimqlc9UG8NoEE cC40QA3+XQ6OmL8QkGq0DH3xNqXD5M7hYP1ozYA== X-IPAS-Result: =?us-ascii?q?A0EkAgBIuz5ohQ9WE4tQCh4BAQsSDECBSAuCREABgRoyB?= =?us-ascii?q?AtJhFWIe4ZVgiEznWaBfw8BAwENTgECBAEBAwEDkGACHgcBBDEIDgECBAEBA?= =?us-ascii?q?QEDAgMBAQEBAQEQAQEFAQEBAgEBAgQGAQIQAQEBAUBJhXsNgls7ghYsDYEnB?= =?us-ascii?q?BkBATgmDgIYDgKDc4InSAMEr0t/M4EBggwBAQaCaNsfCYEbLohQAYVshR4bg?= =?us-ascii?q?g2BPBuHPHqDDjqCL4IvgRaKDZZASGwWNkIsAVUTDQoLBwVhgQgDNQwLLhVuM?= =?us-ascii?q?h2CDYUZghKCB4IlhlyESStPhSKBJoNhFBNrQAMLGA1IESw3FBsGPm4Hl0+Ef?= =?us-ascii?q?YIYlDaye4QlhHCdMIQEk1Q5kk+ZA6MzPyY3AYRogWoDNYFcTTAIGiEqAYI8P?= =?us-ascii?q?xADGQ+OIRmIesBSQjQ8AgcBCgEBAwmFRQEBAYsDgUsBAQ?= IronPort-PHdr: A9a23:Kg/Dzh2LN8qkaoTfsmDOaQ4yDhhOgF0UFjAc5pdvsb9SaKPrp82kY BeEo601xwORBN+Tq6odzbaN6ea4AS1IyK3CmU5BWaQPbSNNsd8RkQ0kDZzNImzAB9muURYHG t9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oI xi7owvcutMKjYd+Jao8xQfFrmZWd+9LwW9kOU+fkwzz68q+4pJv6Thct+4k+8VdTaj0YqM0Q KBXAzghL207/srnuwXdQwCS/HUcSGIWkhRJAwjB8h73W4r6vzX5uORgxiSUJNX6Qr8oVzus6 adrUwLohzwcNzEl6mHXi9d/g7xdrRm8uhFw2Y/UYIWSNPpjYqPQeM4RSGRdUspNUSFKH4WxZ JYNAeUcJ+ZVt4nzqEcBoxSxCweiGeDhxCFPiHLtwa06yuEhHR3G3AA8Hd8DtmnfotXvNKcVV OC41LXFzTPeYPNMxzjy8pPIeQ09r/GLRrJwatHexlc1FwPKk16drpblPzSO1uQWqGeU8fBgV e20hm4iswFxoyGjxtwii4nSnI4VzUrE9SpgzYszONa3R1J1b8S+H5tMqyGVKZF2QsU6Tm11u Cg0xbMLtIC7ciUXx5or2RHRZuGaf4WU/B7uSPqcLCl4iXxre7+ygwi//0auxODzV8S50EtGo ytKnNTNqn0A0QHY5MufSvZl40us1zKC2xrO5uxAO0w5lqvWJ4Q8zrMwjpYfrEfOEy/slEnrk KObeV8o9vWm5unkeLnrqJGROolpgQzgNqQuh9e/AfgmPQgUQmab+OW926P78EHlRrhBk+c4n bPDsJ/AIMQWvq65DBFR0oYk8xu/DSqm0MwZnXkbMl1FYgiLj43xO1HPOfz4DvO/g0+3nztxw vDGJrLhDo/QIXfdiLvhfLB95FBAyAcr0NxS6ZZZBqscLP/3QEP8t93VAgUkPwG02+rnDc9y1 oIaWWKBGK+ZN6bSvEeS5uIoOOmMf5QatyjnK/gq/PPuiGc5mV4Ecamy05oXc2q0HvN8I0WWe XbshMwOHn8QvgUiVOzqlEGCUTlLanqvR648/C00CJq6DYffQYCgmKCO0z2+Hp1Sf2xGDlGME Wz0d4ifQPcNaCeSItd7nTAeVLihTZUh1RC0uwPgxbpnNLmcxipNvpvm0J1x5vbPvRA07z19S cqHgE+XSGQht2UEXTI/x+hFpldmwFqZ3uAsmftDDtZe/fxhVx87cIXD1Kp9Ed+kCVGJRcuAV FvzGobuOjo2VN9km7fmAm54EtSm1FXY2jayRqUSnPqNDYA19aTV2z7wIdx8wjDIzvpplEEoF +1IM2Dunatj707LHYeciUKCjKynb6s02TbMsXyc1iyJpk4LGBVoX/D9VGsELlDTscy/40rDS 7G0DrFyKAxa0sSPMKRib8XoyE5ZX7HkItuNK3mplTKWAhCFjqiJcJKse2gZ23DFD1MYlgkI4 XucHQojHia9rniYCSRvUFHreEmq9PFx7n+2JqMt5yeNaUApl7+8+xpPwOeZV+tWxLUP/iEot zRzGl+5mdPQEduJ4QR7Lu1aZpsm7VFL2Hi81UQ1N4G8L61kml8Vchhm90Lo2RJtD4xckM8s5 Ho0xQt2IKic3RtPbTSdlZz3P7TWLCH18nXNI+bM3UrF2tuM9Y8K8PV9sEr4+gazGQtq8nlq1 cVUz2rJ/o/DX0IZVZP8VFpy9gAv/uqLJHBsodOKkyQxYszW+nfY1tkkBfUo0EOldtZbauafE RPqVtcdDI6oIfArnF6galQFOvpT/eg6JZDDFbPO1ai1MeJnhD/jg35A5dU3yEWX7CBxUOHg2 o4EhuqHxU2ATTi23zLD+ojn3JtJYz0fBD/10y//H4RcfKJaeJ4KTHyxOIuw3No01PuPEzZIs VWkAV0BwsqgfxGfOkf80QNn3kMSuXW7mCG8wlSYihkRp7GElGzLyuXmLl8cP3JTAXNlhhHqK JS1iNYTWA6paRIonV2r/xSyy69eraV5Z27dJCUANzLxNHpoX7G/nr+aYotU94hutj9YGOixe lGVTLfhrgBSiniyWTIPgmBlMWj38pzi1wR3kmecMGp+oB+7MYlryBHT6cadDf9d0zwaRTVp3 DzeB1yyJd6srp2fk5bOtPz7Vnr0D8YCN3C6i9Pe8nLmtggISVWlkvu+m8PqC10/2C7/jZxxU DnQ6Qz7ac/t3ri7NuRueg9pAkX94ox0ANIb8MN4iZcO1HwdnpjQ82AAlDK5K9JAwqjzdnUlQ CYKhsXK+07iwkIpfRfrj8rpE26QxMdsfYzweGQNwSgw9c9iDb+Vqadbhm1yuFXy/mezKbBt2 zwaz/Up8nsTheoE7REswiuqCbcXBUBEPCbomkfA/5Wkoa5Qfmrqbamo2R80g4W6FL/b6FI5O j6xatI4ECR39Mk6LF/czCi59NT/YNeJJdtBthCOmlHFl+kQK5YqnLwPnSUhNW+Y3zVtwrw5k Bppm5Sivc2EL35nuqehDVhUO3X8NdsX5y3qy6NGn4OV25ulWJB5FXMHUf6KBbqhQjsKsvDjM ECLCDx5qXOAE/zaBQDZ5EoupiDNDoiqK3yNYnwBzJBhQAKXYklHj0YYUVBY1tYwRBit38Hgf EB/oDUJ5xv7rgBGjOdwOF/zXy/W9g6yZyxyTYCeaRlS9QsE4l/ad8CTi4A7VygK/pC7qQGWb GmDZkFLCXoDHEmcCBbvM/H57N3EuYB0H8KYKP3DKfWLoO1aDbKTwI63l5Fh9HCKP9mOOX9rC 7s63FBCVDZ3AZaRnTJHUCERmy/XCqzT7B6h5i16qNy++/X3SUru44WIEb5bLdRo/Vi/n66CM +eagCsxJyxf09sAwnrByb5X21B36Wkmbz62DbEJrjLAVorSh7dWExMBLSZrNY5L67k2mAxVN ojXh5K917J1iOI0F0YQVVHlnZLMB4RCKGW8OVXbQUeTYe3ddHuSkoenP+XlFO417q0crRC7t DeFHlW2Oz2Ck2OsTBWzKaRWiyrdOhVCuYa7exIrCG75TdugZAfoVb0/xTAw37AwgWvHcGAGN j0pOVlKtaaa4DlXqvBnGila8WEjKvOL0XX8jaGQOtMNvP1nDz4h3fpd+2g/wqBJ4TtsRuFtm TfftJhru1Djke2UwHxiSBUIpjsB1+fp9Q1yfK7e8JdHQ3PN+hkAuH6RBxo9rNxgEtTzuqpUx 7Ane4r2MDYH6M3Pu8wGCJqNQCpiGH85MF/yByWSCxEKH2bD3YD3hVFFke2f7DuQtpl/qZz3k twLUrAdWFFnTpsn IronPort-Data: A9a23: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 Z86q6VhLoxWNrEuVXMVhu8U IronPort-HdrOrdr: A9a23:dKdZ9KFXOcwctq/0pLqE78eALOsnbusQ8zAXPidKJyC9E/b2qy nKpp8mPHDP6Ar5NEtNpTn/AtjjfZqsz/9ICOAqVN/JMTUO01HYT72Kg7GSpgEIYxeOktJ1xO NlaexkBNX7EFh9ityS2njeL+od X-Talos-CUID: 9a23:aVnR7GNUdam67e5DBTJ35BEoOZscLifHyS3hc2KqF0hYYejA X-Talos-MUID: 9a23:oLDJWwuBwxUIhzEUzc2nih4hGcJh8rmVFEEnlKwgtM21EhZ5EmLI X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.16,205,1744063200"; d="scan'208";a="225021687" X-MGA-submission: =?us-ascii?q?MDEkAMVD100Jsb5mzxxEd6xVepGczrRIng3bis?= =?us-ascii?q?mUqClQ10r253RY1qcuc3N1rkmVvwILvyJVQScXJ4hnOAg+GpsaYv7YDP?= =?us-ascii?q?2NgnpFiMDuZBJwygwj+o0KoIlsBYYLy/FhpAEB2QIu0So+MxWhU/OCym?= =?us-ascii?q?NwSetKJoKGC9krfDW3zDpbfQ=3D=3D?= Received: from jupiter.mpi-klsb.mpg.de ([139.19.86.15]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2025 11:12:07 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mpi-sws.org ; s=mail202309; h=To:Message-Id:Date:Mime-Version:Content-Transfer-Encoding: Content-Type:From:cc:content-id:content-description:in-reply-to:references; bh=mecyG4joGm/ZAzrZch/gK9DFDpzJM8khcYYrOWkE2Xc=; b=Uc4wHIH3TcWWatm26+k3+KaB1p 0MRESW6BBnaMqJq9xVVS5QdrTpkMbg822PliMFbgpZecDraSYM4IaJkmUWipBncgCG1hqV2OZJnFg /r9ikRzt1gT3T/3ZcDb/88rC71AwiiLxF//42OoUMh6RU0RgOKY0EwPBMFHUfpq/i6qujOQCn1lrU zBc0cfuQRxk+bv6APPqLnWzT1zyH6Q6SIZDzA/2VpGM+/UnFsRag9Peu65vblrGF5tLkldUqROViW TcpOZu6kDMY/CF/SLEWwCYKJ391eug/3xmP0hnvtT/jX1kfw4aoqWyO4F47VTeWwRNBbiKNPxEAqy zwyjOTWg==; Received: from srv-23-0408.mpi-klsb.mpg.de ([139.19.205.27]:58134 helo=zak.mpi-klsb.mpg.de) by jupiter.mpi-klsb.mpg.de (envelope-from ) with esmtps (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.98.2) id 1uMNgh-0000000F4IN-45lW; Tue, 03 Jun 2025 11:12:06 +0200 Received: from ip-185-104-138-33.ptr.icomera.net ([185.104.138.33]:62061 helo=smtpclient.apple) by zak.mpi-klsb.mpg.de (envelope-from ) with esmtpsa (TLS1.2:ECDHE_SECP256R1__RSA_SHA256__AES_256_GCM:256) (Exim 4.96) id 1uMNgh-00CSS5-0h; Tue, 03 Jun 2025 11:12:03 +0200 From: Andreas Rossberg Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.600.51.1.1\)) Date: Tue, 3 Jun 2025 11:11:49 +0200 Message-Id: <26E93D7A-BAF3-46FB-8CAF-8DA7F7DEAF6B@mpi-sws.org> To: caml-list@inria.fr X-Mailer: Apple Mail (2.3826.600.51.1.1) x-ms-reactions: disallow Subject: [Caml-list] Warning 69 (unused record fields) and polymorphic reads Reply-To: Andreas Rossberg X-Loop: caml-list@inria.fr X-Sequence: 19332 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: Today, I ran into a slight annoyance with warning 69 (unused record = fields). Obviously, the warning does not consider uses of polymorphic = operators like `=3D` or `compare`, which technically are reads of the = fields. Unfortunately, it turns out that there are reasonable use cases = where these are the _only_ reads, resulting in bogus warnings. There probably isn't much that can be done about it(?), since such = access could hide in any polymorphic function invocation. Hence I = didn=E2=80=99t file a bug. But for the record, I thought I'll show the = counter example anyway. Consider code that implements some processing akin to SQL `group by`, as = in: ``` SELECT artist, album, COUNT(*), SUM(time), ... FROM Tracks GROUP BY = artist, album; ``` Intuitively, this extracts all known albums from a list of track (song) = meta data, and computes their total running time, among other values. Here is a sketch of how to achieve something similar in OCaml: ``` module GroupKey =3D struct type t =3D {artist : string; title : string} let compare =3D compare end module GroupMap =3D Map.Make(GroupKey) type track =3D ... type acc =3D ... (* result type *) val empty_acc : acc val accumulate : entry -> acc -> acc (* combine result *) let albums =3D tracks |> List.fold_left (fun map (entry : track) -> let group =3D {artist =3D entry.artist; title =3D entry.title} = in let acc =3D Option.value (GroupMap.find_opt group map) = ~default: empty_acc in GroupMap.add group (accumulate acc entry) map ) GroupMap.empty |> GroupMap.bindings |> List.map snd ``` The only purpose of the `GroupKey.t` type in this code is to identify = entries belonging to the same group. Its fields are read implicitly by = `GroupMap.find/add`, which invokes `compare` on them. Yet, this code = produces warnings that `artist` and `title` are never read, which = technically isn=E2=80=99t quite correct. In my actual code, the key record has more fields, which is why I = didn=E2=80=99t want to replace it with a tuple. Perhaps there is some annotation magic I=E2=80=99m missing that could be = applied to the type definition to suppress the warning? /Andreas