From: skaller <skaller@users.sourceforge.net>
To: Arnaud Spiwack <aspiwack@lix.polytechnique.fr>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Re: Void type?
Date: Mon, 30 Jul 2007 14:40:37 +1000 [thread overview]
Message-ID: <1185770437.11618.29.camel@rosella.wigram> (raw)
In-Reply-To: <46ACF35F.5070102@lix.polytechnique.fr>
On Sun, 2007-07-29 at 22:06 +0200, Arnaud Spiwack wrote:
> One reason why it might be useful, is that it gives an equivalence
> between the types t -> void and t -> 'a (for any type t). Earlier
> in this thread it was mentioned that these sort of functions could be a
> reason to use a void type.
It is used like this in Felix:
type void
type proc = unit -> void
exception Ok
let squash () : void = raise Ok
let call (f:proc) : unit = try ignore(f ()) with Ok -> ()
let seq (fs: proc list): proc =
fun () -> squash (List.iter call fs)
(* example *)
let x = ref 0
let f () : void = squash (incr x)
let incr3 : proc = seq [f;f;f];;
call incr3;;
print_endline ("x=" ^ string_of_int !x);;
You can write combinators such as 'cond' and 'loop' as well.
The combinators are purely functional and lazy, except 'call'
which forces side-effecting.
The advantage is the type system prevents some accidents:
let f () = incr x;;
f (f ());; (* woops *)
by using the fact that void has no values, to prevent using
the application of a procedure as the argument of an function.
Given a purely functional library .. you could probably
design a purely functional camlp4/5 syntax, then you'd
actually get referential transparency.
--
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net
next prev parent reply other threads:[~2007-07-30 4:40 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-28 4:14 Stefan Monnier
2007-07-28 4:33 ` [Caml-list] " Erik de Castro Lopo
2007-07-28 4:51 ` Chris King
2007-07-28 18:49 ` Stefan Monnier
2007-07-28 18:53 ` Basile STARYNKEVITCH
2007-07-29 0:48 ` Stefan Monnier
2007-07-28 18:57 ` Arnaud Spiwack
2007-07-28 6:12 ` Daniel de Rauglaudre
2007-07-28 6:15 ` Chung-chieh Shan
2007-07-28 8:22 ` [Caml-list] " rossberg
2007-07-29 6:31 ` Chung-chieh Shan
2007-07-29 11:05 ` [Caml-list] " Arnaud Spiwack
2007-07-29 11:16 ` Jon Harrop
2007-07-29 11:36 ` Arnaud Spiwack
2007-07-29 12:43 ` Richard Jones
2007-07-29 12:58 ` Arnaud Spiwack
2007-07-29 17:02 ` Richard Jones
2007-07-29 20:06 ` Arnaud Spiwack
2007-07-29 22:55 ` Brian Hurt
2007-07-30 4:40 ` skaller [this message]
2007-07-30 23:13 ` Brian Hurt
2007-07-31 8:52 ` Richard Jones
2007-07-31 13:08 ` Chris King
2007-07-31 15:27 ` Markus Mottl
2007-08-01 11:37 ` Tom
2007-08-01 16:23 ` Markus Mottl
2007-07-30 4:44 ` Geoffrey Alan Washburn
2007-07-30 13:11 ` [Caml-list] " Brian Hurt
2007-07-30 13:32 ` Christopher L Conway
2007-07-30 13:35 ` Geoffrey Alan Washburn
2007-07-30 13:41 ` [Caml-list] " Chris King
2007-07-30 17:43 ` Christophe Raffalli
2007-07-30 17:58 ` Markus Mottl
2007-07-30 14:27 ` Jeff Polakow
2007-07-28 7:58 ` Sébastien Hinderer
2007-07-28 8:13 ` [Caml-list] " Basile STARYNKEVITCH
2007-07-28 12:29 ` Christophe TROESTLER
2007-07-28 13:36 ` Brian Hurt
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=1185770437.11618.29.camel@rosella.wigram \
--to=skaller@users.sourceforge.net \
--cc=aspiwack@lix.polytechnique.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