caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Brian Rogoff <bpr@best.com>
To: <jhw@wetware.com>
Cc: The Caml Trade <caml-list@inria.fr>
Subject: Re: [Caml-list] Re: Phantom types (very long)
Date: Tue, 11 Sep 2001 12:16:57 -0700 (PDT)	[thread overview]
Message-ID: <20010911120100.F11489-100000@shell5.ba.best.com> (raw)
In-Reply-To: <25775F60-A6E4-11D5-9E93-000502DB38F5@mac.com>

On Tue, 11 Sep 2001, j h woodyatt wrote:
> So okay... I take it back.  Caml *does* have invariants.  (I'm
> learning.  Slowly.  But I'm learning.)
>
> This "phantom types" design pattern is one I have never seen before.

I remember reading J. Vouillon's post a long time ago and thinking "Man,
that's weird, having that type parameter not show up on the right hand
side of the type definition!" But it wasn't until Blume's post on the ML
ng that I got a name for the concept "phantom" and "witness" types. Do a
Google search on "phantom type" and you'll turn up a few Haskell paper's,
most notably tsome ones on connecting Haskell to Microsoft COM, and some
on domain specific languages.

> It doesn't seem to be used in the standard library anywhere I can see.  It
> looks like it might be useful in presenting a safer network programming
> interface than the low-level wrappers around BSD sockets (which I've
> never liked).

It's always a good idea to have thin (low level bindings) available. You
can build your abstractions on top of them, but to do otherwise is an
abstraction inversion.

> Are there any other mind-blowingly elegant design patterns lurking in
> the corners of the Caml type inference engine that I should know about?

Yes! And there there will be even more when we get polymorphic recursion
and generics ;-)

-- Brian

PS: Yeah, I'll post some more soon assuming I don't get blown up. Many
tricks involve simulating dependent types so if you look up dependent
types that'll get you started. In particular try to understand Danvy's
"Functional Unparsing"" paper.



-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  reply	other threads:[~2001-09-11 19:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-09-07 18:35 [Caml-list] opaque polymorphism Charles Martin
2001-09-10  7:02 ` Francois Pottier
2001-09-10 23:19   ` Phantom types (very long) (Was Re: [Caml-list] opaque polymorphism) Brian Rogoff
2001-09-11  9:44     ` Andreas Rossberg
2001-09-11 18:38     ` [Caml-list] Re: Phantom types (very long) j h woodyatt
2001-09-11 19:16       ` Brian Rogoff [this message]
2001-09-12  9:33       ` Daan Leijen
2001-09-14  8:49       ` Jacques Garrigue
2001-09-14 19:10         ` Brian Rogoff

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=20010911120100.F11489-100000@shell5.ba.best.com \
    --to=bpr@best.com \
    --cc=caml-list@inria.fr \
    --cc=jhw@wetware.com \
    /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).