From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 086AABB84 for ; Sun, 22 Jun 2008 01:08:50 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjIIAH0mXUjAXQImiGdsb2JhbAASklcBAQEPIJFHiUE X-IronPort-AV: E=Sophos;i="4.27,684,1204498800"; d="scan'208";a="14348832" Received: from discorde.inria.fr ([192.93.2.38]) by mail3-smtp-sop.national.inria.fr with ESMTP; 22 Jun 2008 01:08:49 +0200 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id m5LN8nLL012313 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Sun, 22 Jun 2008 01:08:49 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjIIAGQnXUjCpx6wiGdsb2JhbAASklcBAQEPIJFDiUA X-IronPort-AV: E=Sophos;i="4.27,684,1204498800"; d="scan'208";a="12394762" Received: from smtpmin.univ-orleans.fr (HELO min.univ-orleans.fr) ([194.167.30.176]) by mail2-smtp-roc.national.inria.fr with ESMTP; 22 Jun 2008 01:08:41 +0200 Received: from smtps.univ-orleans.fr (localhost [127.0.0.1]) by min.univ-orleans.fr (Postfix) with ESMTP id CB0FF12B42C for ; Sun, 22 Jun 2008 01:08:40 +0200 (CEST) Received: from [192.168.0.12] (ras75-4-82-235-58-110.fbx.proxad.net [82.235.58.110]) by smtps.univ-orleans.fr (Postfix) with ESMTP id B34D636E60 for ; Sun, 22 Jun 2008 01:08:45 +0200 (CEST) Subject: Polymorphic variant as a witness? From: David Teller To: OCaml Content-Type: text/plain Date: Sun, 22 Jun 2008 01:11:59 +0200 Message-Id: <1214089919.6190.13.camel@Blefuscu> Mime-Version: 1.0 X-Mailer: Evolution 2.12.1 Content-Transfer-Encoding: 7bit X-Miltered: at discorde with ID 485D8A01.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; univ-orleans:01 variants:01 ocaml:01 camlp:01 runtime:01 ocamlc:01 variants:01 univ-orleans:01 lifo:01 liquidations:98 polymorphic:01 polymorphic:01 encode:01 encode:01 behaviour:01 Dear list, I have been thinking for some time about using polymorphic variants to encode some aspects of a types-and-effects type system in OCaml using Camlp4. While the idea is still quite fuzzy, I have the feeling that, if I could have a value (let's call it "witness") with type [> ] ref which I could "touch" into becoming [> `A] ref then [> `A | `B] ref etc. as effects `A, `B, etc. appear in the program, it could provide interesting information on the effects of the program. Now, of course, I can't define a value with type ref [> ] or even with type ref [> `dummy]. That is, when compiling a module consisting only in a declaration such as let witness = ref `dummy I'm faced with the good old "cannot be generalised" error message. This strikes me as normal -- I'm sure that, with the right modifications on witness, I could cause runtime type inconsistencies for any client attempting to read the value of witness. However, in this case, I'm not going to read any value from witness, ever. I only want to "touch" it into becoming something a tad more complex, which I could then look at with ocamlc -i or such. My question is: is there a way to hijack polymorphic variants into doing what I wish? Or to encode this behaviour somehow? Thanks, David -- David Teller Security of Distributed Systems http://www.univ-orleans.fr/lifo/Members/David.Teller Angry researcher: French Universities need reforms, but the LRU act brings liquidations.