From: "Daniel Bünzli" <daniel.buenzli@epfl.ch>
To: Dario Teixeira <darioteixeira@yahoo.com>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Smells like duck-typing
Date: Wed, 17 Oct 2007 16:25:40 +0200 [thread overview]
Message-ID: <C8062F99-AC43-4DB1-8E08-66FDB5B509CD@epfl.ch> (raw)
In-Reply-To: <932096.75090.qm@web54602.mail.re2.yahoo.com>
Use a record with a phantom type (the type must be abstract for this
to work). The record has the common properties as fields and a data
field which is either a list of tagged values (if many kinds of
stories share the same fields) or a variant for the data specific to
a kind of story. If there are operations that are allowed only on
some kind of stories constrain the phantom type in the signature to
enforce this statically.
Best,
Daniel
module Story : sig
type 'a t constraint 'a = [< `Full | `Blurb | `Fresh ]
(* Story creators *)
val full : ... -> `Full t
val blurb : ... -> `Blurb t
val fresh : ... -> `Fresh t
val print_meta_data : [< `Full | `Blurb ] t -> unit
end = struct
type 'a t = {
id : int;
title : string;
intro : string;
data : ...
}
...
end
next prev parent reply other threads:[~2007-10-17 14:25 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-17 13:35 Dario Teixeira
2007-10-17 14:13 ` [Caml-list] " Arnaud Spiwack
2007-10-17 14:47 ` Dario Teixeira
2007-10-17 14:25 ` Daniel Bünzli [this message]
2007-10-17 15:03 ` skaller
2007-10-17 15:13 ` Dario Teixeira
2007-10-17 15:25 ` Arnaud Spiwack
2007-10-17 15:32 ` Daniel Bünzli
2007-10-17 16:21 ` Chris King
2007-10-18 7:28 ` Stefano Zacchiroli
2007-10-18 8:33 ` [ANN] pa_oo and pa_polymap for 3.10 (Re: [Caml-list] Smells like duck-typing) Jacques Garrigue
2007-10-17 16:57 ` [Caml-list] Smells like duck-typing skaller
2007-10-17 16:52 ` skaller
2007-10-17 16:59 ` Robert Fischer
2007-10-17 14:33 ` Chris King
2007-10-17 14:59 ` Dario Teixeira
2007-10-17 15:24 ` Vincent Aravantinos
2007-10-17 15:26 ` Zheng Li
2007-10-18 16:13 ` Zheng Li
2007-10-18 16:37 ` [Caml-list] " William D. Neumann
2007-10-19 0:58 ` Jacques Garrigue
2007-10-17 19:59 ` [Caml-list] " Richard Jones
2007-10-17 20:24 ` Dario Teixeira
2007-10-18 7:37 ` Stefano Zacchiroli
2007-10-18 10:31 ` Dario Teixeira
2007-10-18 10:37 ` Stefano Zacchiroli
2007-10-18 13:28 ` Robert Fischer
2007-10-18 14:10 ` Dario Teixeira
2007-10-18 14:18 ` Brian Hurt
2007-10-18 14:29 ` Arnaud Spiwack
2007-10-18 14:45 ` Brian Hurt
2007-10-18 15:02 ` Arnaud Spiwack
2007-10-18 15:07 ` Robert Fischer
2007-10-18 15:14 ` Arnaud Spiwack
2007-10-18 16:39 ` skaller
2007-10-18 16:49 ` Arnaud Spiwack
2007-10-18 17:47 ` skaller
2007-10-18 19:55 ` Robert Fischer
2007-10-18 16:22 ` skaller
2007-10-18 16:30 ` Dario Teixeira
2007-10-18 14:58 ` Robert Fischer
2007-10-18 15:11 ` William D. Neumann
2007-10-18 15:47 ` Loup Vaillant
2007-10-18 16:08 ` William D. Neumann
2007-10-19 13:08 ` Ed Keith
2007-10-18 16:24 ` Dario Teixeira
2007-10-18 16:35 ` Vincent Aravantinos
2007-10-18 16:43 ` Brian Hurt
2007-10-18 17:04 ` William D. Neumann
2007-10-18 17:05 ` Dario Teixeira
2007-10-18 17:22 ` Brian Hurt
2007-10-18 17:58 ` Dario Teixeira
2007-10-18 15:42 ` Vincent Aravantinos
[not found] <47161E3B.3060704@tsc.uc3m.es>
2007-10-17 15:01 ` Dario Teixeira
2007-10-17 20:20 ` Alain Frisch
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=C8062F99-AC43-4DB1-8E08-66FDB5B509CD@epfl.ch \
--to=daniel.buenzli@epfl.ch \
--cc=caml-list@yquem.inria.fr \
--cc=darioteixeira@yahoo.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