caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques Garrigue <garrigue@math.nagoya-u.ac.jp>
To: Julien.Verlaguet@pps.jussieu.fr
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] bizarre type
Date: Fri, 01 Jul 2005 08:57:27 +0900 (JST)	[thread overview]
Message-ID: <20050701.085727.25912785.garrigue@math.nagoya-u.ac.jp> (raw)
In-Reply-To: <Pine.LNX.4.62.0506302337540.29747@hydrogene.pps.jussieu.fr>

From: Julien Verlaguet <Julien.Verlaguet@pps.jussieu.fr>
> 
> > Well, since '_a t = int t the compiler can freely choose either for
> > printing. Or bool t, for that matter.
> 
> agreed.

Nice to see that everybody agrees that the current behaviour is
reasonable :-)
And thanks to Andreas for explaining things so well.

Yet, these useless parameters are a rather weak part of the compiler,
so there may be some bugs left there. I.e. it is hard to guarantee
that "a t" will alway be equivalent to "b t" for any use, while they
should be so in the intended semantics. Bugs report are welcome.

In general, I would suggest avoiding non-abstract phantom types, as
they are useless... except when you're going to abstract them at the
next module boundary.

> In fact it prevents me from writting this :
> 
> type 'a marshalled=string
> 
> let make (x : 'a)=(Marshal.to_string x [] : 'a marshalled);;
> 
> And then do all type of operations in a type safe way on strings.

What you want seems to be the Graal: a type that is more than a
string, but can be implicitly coerced to one. Of course the opposite
direction would not be allowed.
A standard way to do that is to make [marshalled] abstract, and provide
a function [to_string] when you need to recover the string.
In ocaml 3.09, you will have another possibility: using a private type
for that, with the extra advantage of having pattern-matching (this
doesn't work with private types in 3.08, as they are not handled as
abstract.)
But not yet the Graal, which requires to combine implicit subtyping
with type inference in a non-trivial way...

> The only tiny thing that disturbs me is that in my previous example :
> 
> let g (x : 'a t) (y : 'a)
> 
> the type of y depends on the 'a present in 'a t.
> It is odd. But I have to admit it's correct.

The point here is that ['a t] is not the type of [x] itself, but a
type that can be unified with it. And useless parameters are discarded
during unification. At a more theoretical level, ['a t] is only
required to be equivalent to the type of [x], not identical.

Jacques Garrigue


  reply	other threads:[~2005-06-30 23:57 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-30 15:48 Julien Verlaguet
2005-06-30 16:49 ` [Caml-list] " Andreas Rossberg
2005-06-30 16:58   ` Julien Verlaguet
2005-06-30 17:16     ` Stephane Glondu
2005-06-30 17:24     ` Andreas Rossberg
2005-06-30 18:30   ` Julien Verlaguet
2005-06-30 19:37     ` Andreas Rossberg
2005-06-30 21:42       ` Julien Verlaguet
2005-06-30 23:57         ` Jacques Garrigue [this message]
2005-07-03 11:42         ` Damien Doligez
2005-07-03 12:37           ` Jacques Garrigue

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050701.085727.25912785.garrigue@math.nagoya-u.ac.jp \
    --to=garrigue@math.nagoya-u.ac.jp \
    --cc=Julien.Verlaguet@pps.jussieu.fr \
    --cc=caml-list@yquem.inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).