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 837565D5 for ; Mon, 28 Oct 2019 15:11:35 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.68,240,1569276000"; d="scan'208";a="408839905" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 28 Oct 2019 16:11:34 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 5C16A7F318; Mon, 28 Oct 2019 16:11:34 +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 F39F77ED20 for ; Mon, 28 Oct 2019 16:10:54 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jacques.garrigue@gmail.com; spf=Pass smtp.mailfrom=jacques.garrigue@gmail.com; spf=None smtp.helo=postmaster@mail-wr1-f46.google.com IronPort-PHdr: =?us-ascii?q?9a23=3AJdFz2xICCBSKfB6mxdmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgRLfvxwZ3uMQTl6Ol3ixeRBMOHsqkC2rud7PmocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbAhEmTSwbal2IRiyognctNQaipZ+J6gszRfEvmFGcP?= =?us-ascii?q?lMy2NyIlKTkRf85sOu85Nm7i9dpfEv+dNeXKvjZ6g3QqBWAzogM2Au+c3krgLD?= =?us-ascii?q?QheV5nsdSWoZjBxFCBXY4R7gX5fxtiz6tvdh2CSfIMb7Q6w4VSik4qx2ThLjlS?= =?us-ascii?q?UJOCMj8GzPisJ+kbxVoByiqRJxzYHbb4OaO+ZxcK7GYdMXRnBMUtpNWyFPAI6x?= =?us-ascii?q?aZYEAeobPeZfqonwv18AogGiCgm1GePg1CRIjWL306IgyeQhCwDG3AM9H90QrX?= =?us-ascii?q?/Zq9f1O70OXuCs0anH0y7DY+lZ2Tjn8ojIaBEhof6RXb1uasfRxkwvGBnEjlWU?= =?us-ascii?q?s4DqIzSV1uEUvmWd8uFuVvqvhnY5pw1tpjWj3MQhh4nTio4L1FzI6D91zYk0KN?= =?us-ascii?q?GgVUJ3f92pHIFUuiyULYd7Q8wvT3tptSs6zLANpIS1czIQyJs9wh7Sc/yHfJaM?= =?us-ascii?q?4hLkTOuRJC13hHNheL6miRey61WsxvTyVsS70VtGtCVFkt7LtnAC0xzc9NKLRe?= =?us-ascii?q?d6/kekwTqP1gbT5f9YIU0si6bXN5oszqQzm5cTq0jPADH6lFjsgKKZd0go4u2o?= =?us-ascii?q?5P7mYrXiqJ+cLYh0igTmP6QsgMOwHf04MhUQUGiA4+i826fs/VfjQLVLgf02j7?= =?us-ascii?q?fWvYvVJcQevKG5AgtV3pw/5Ba4CjeqyM4YkmUfLFJZZBKHiJDkNE3UL/D9Cfez?= =?us-ascii?q?mlCskDZwx/DaJbDhGZXMLn3bkLj7Z7p96khcyBAyzd9F/Z5UBKsBc7rPXRr6vd?= =?us-ascii?q?ncSxs4KBCcwuD9Cdw72JlNd3iIB/q7OajLrFKTrs0mOfONa5IY8GL/IvM8+vP1?= =?us-ascii?q?y3Awg0UccrSk9ZQSYXG8WP9hJhPKMjLXnt4dHDJS7UIFR+vwhQjaCGMBVzOJR6?= =?us-ascii?q?s5owoDJsemAIPEHN3/hbWA2GKkBMQTaDwYTF+LFnjsesOPXPJeMHvOcP8kqSQN?= =?us-ascii?q?UP2ac6FkzQun7VaoxL9uL+6S8Sod58q6hYpFotbLnBR3zgRaSsGU0mWDVWZxxz?= =?us-ascii?q?paSDo/3aQ5qkt4mA6O?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DfAABdBLddhy7dVdFlHAEBAQEBBwEBE?= =?us-ascii?q?QEEBAEBgWoEAQELAYNgXIQog3qLCoIQg2qFfHSEc4tHCQEDAQoBAS8BAYRAAoN?= =?us-ascii?q?KHAcBBDMGDgIMAQEEAQEBAgECAwQBEwEBAQgNCQgphT4MgjsignUBAQEDEhEEC?= =?us-ascii?q?wEFCAEbHgMMBgULDQICJgICIxEBBQEcEwYCAQEegwCCRgEDLqQEgQM8iyV/FgU?= =?us-ascii?q?BF4J/BYJKgX0KGScNYwOBPAIHCQEIfCgBhRWGeYFYP4E4gms+hRKCQ4JeBK1oB?= =?us-ascii?q?4InaQSUOwYbjgoSiz6oBwIEAgQFAgYPI4FFgXtNI1AxgjtQEBSDBhqDWYpUQDO?= =?us-ascii?q?QVAEB?= X-IPAS-Result: =?us-ascii?q?A0DfAABdBLddhy7dVdFlHAEBAQEBBwEBEQEEBAEBgWoEAQE?= =?us-ascii?q?LAYNgXIQog3qLCoIQg2qFfHSEc4tHCQEDAQoBAS8BAYRAAoNKHAcBBDMGDgIMA?= =?us-ascii?q?QEEAQEBAgECAwQBEwEBAQgNCQgphT4MgjsignUBAQEDEhEECwEFCAEbHgMMBgU?= =?us-ascii?q?LDQICJgICIxEBBQEcEwYCAQEegwCCRgEDLqQEgQM8iyV/FgUBF4J/BYJKgX0KG?= =?us-ascii?q?ScNYwOBPAIHCQEIfCgBhRWGeYFYP4E4gms+hRKCQ4JeBK1oB4InaQSUOwYbjgo?= =?us-ascii?q?Siz6oBwIEAgQFAgYPI4FFgXtNI1AxgjtQEBSDBhqDWYpUQDOQVAEB?= X-IronPort-AV: E=Sophos;i="5.68,240,1569276000"; d="scan'208";a="408839714" X-MGA-submission: =?us-ascii?q?MDE/AeNNEVISuh/v/yIsTY//gPR/XegfvnwJpK?= =?us-ascii?q?SUysbDRJC0bIWj62MLH8FpKRF6JCkq95ZcHRT6bg2gfvH/A+jXwIbKcl?= =?us-ascii?q?5bfwJa6UqMt2mt5AfrSfaodBT8wVEk25ulUS4ObBsdIW5Jrk/COHa/o8?= =?us-ascii?q?e3OotOgHtYn5dVJ6m7PiFVEw=3D=3D?= Received: from mail-wr1-f46.google.com ([209.85.221.46]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 28 Oct 2019 16:10:54 +0100 Received: by mail-wr1-f46.google.com with SMTP id n15so10245125wrw.13 for ; Mon, 28 Oct 2019 08:10:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:references:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding:content-language; bh=aZvyOMy2D8ALvaYm3TxgWQMnRgWz8sgvJS1/ojMfGSY=; b=J0G8caVTaTGe6K17nYpx6oyZeZt+VwmAUnrfreyvmgqvHv3i6DxW7ufSIXVlSpnSHj X0ur4tNaPRsubAqfYEaX+3wFXPoFhwtdohyL9JIaRfbaqKY5ZNq79gK4WCvHNov6vyjc XTMhuzkRDIcm7+TfnMamI3yG05paDB1sV0qUzxchRHd2XjgB3TVRWGcQ0zdtdsxCk9mn jgriJ0XjH1CP2bD1TfRe4zeUvil9MHHpTFpQ9RbG4+Xdydj51s/DUBPwqXiveG1EBLOa m+iZZh62M4CGR6XuxKKRCBBGwnTkbnOPwKqpfhy/BGbeYBNLscyHf0N8Y98JzfMAy7tJ 8QHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=aZvyOMy2D8ALvaYm3TxgWQMnRgWz8sgvJS1/ojMfGSY=; b=kJnkv/Pm0NLIw8vq9Zt2HzSPXVS2+FqmPe1M7bKAiu2F3uW0BiWdpARDrtYpe7UH+S Y7a6iR1ZMcEztXDw51a7jl0Oq3TqDq8ozeZIxVcnTgPjswVxPAYNKbtW2rZlTGTnwzDW gMIxces/9FFh81W9eyVYnLVAF9NED+rrdvKKxPgLfOwTUROZ/PSgaNMTzhVsuR3waZOO 5vkXn59JmPTMgyey2h80zoB7LqGjTIKtXqIaQMVJWSjgPrWawLiHJmRD1xWXyJBOKGRD DLdwbSvGG02brr3l/b8hcieFC9oXWAo6ayghAxPfYil+GRORALat+Rt8tq7vF0q/Hz29 mcIw== X-Gm-Message-State: APjAAAVmaFhHXr+l0ktj3Ya4BLMtJMlizTweCwk9sPZNnvP7jo8BiQs5 iMCeQustQFLZX8gpbsKrQ3bQYSOi X-Google-Smtp-Source: APXvYqww94mWGyDDFXzKwNDBlgpoLMYX+qOJ7COgg/2O5WRJjrt5dx7vlePdAlfJJqB4w14e9rI7JQ== X-Received: by 2002:a5d:544d:: with SMTP id w13mr15753926wrv.19.1572275453725; Mon, 28 Oct 2019 08:10:53 -0700 (PDT) Received: from [128.93.64.65] (sauternes.paris.inria.fr. [128.93.64.65]) by smtp.gmail.com with ESMTPSA id v10sm16170207wmg.48.2019.10.28.08.10.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Oct 2019 08:10:52 -0700 (PDT) From: Jacques Garrigue X-Google-Original-From: Jacques Garrigue To: caml-list@inria.fr References: Message-ID: Date: Mon, 28 Oct 2019 16:10:52 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Validation-by: jacques.garrigue@gmail.com Subject: Re: [Caml-list] phantom types and coercion Reply-To: Jacques Garrigue X-Loop: caml-list@inria.fr X-Sequence: 17852 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: On 28/10/2019 15:27, rixed@happyleptic.org wrote: > Hello list. > > I'm trying to use several parameters in a phantom type ; everything works alright, but coercion. > For instance, in the code below, how come s1 can be coerced into a string by s2 cannot ? This is due to the presence of a free type variable in the type of s2. In that case, a single coercion will just generate a generic supertype, and attempt to unify the type of s2 with it. Your best bet is to write a double coercion.    (s2 : _ M.t :> string) Jacques Garrigue > # module M : sig type +'a t = private string val m1 : string -> [`C1] t val m2 : string -> ([`C2] * 'a) t end = struct type 'a t = string let m1 s = s let m2 s = s end;; module M : > sig > type +'a t = private string > val m1 : string -> [ `C1 ] t > val m2 : string -> ([ `C2 ] * 'a) t > end > # let s1 = M.m1 "foo";; > val s1 : [ `C1 ] M.t = "foo" > # let s2 = M.m2 "bar";; > val s2 : ([ `C2 ] * 'a) M.t = "bar" > # print_string (s1 :> string);; > foo- : unit = () > # print_string (s2 :> string);; > Error: This expression cannot be coerced to type string; it has type > ([ `C2 ] * 'a) M.t > but is here used with type string >