From: Alain Frisch <frisch@clipper.ens.fr>
To: Diego Olivier Fernandez Pons
<Diego-Olivier.FERNANDEZ-PONS@cicrp.jussieu.fr>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Streams
Date: Fri, 2 Aug 2002 17:29:04 +0200 (MET DST) [thread overview]
Message-ID: <Pine.SOL.4.44.0208021706020.17897-100000@clipper.ens.fr> (raw)
In-Reply-To: <Pine.A32.3.95.1020802160858.55812C-101000@ibm1.cicrp.jussieu.fr>
Hello Diego,
On Fri, 2 Aug 2002, Diego Olivier Fernandez Pons wrote:
> - serait-il possible de documenter un peu le module obj ? Peut-être
> est-ce une mauvaise idée, dans la mesure où cela pourrait permettre à
> des utilisateurs non avertis d'écrire du code dangereux
Using Obj safely requires to know a little bit about the runtime
representation of objects; and once you have this knowledge (after
reading the section on interfacing with C in the manual, or the OCaml
runtime source files), the module interface should be self-explanatory.
> L'inconvénient est que l'on perd le polymorphisme de la liste vide.
> N'y a t-il aucun moyen de s'en sortir en utilisant du Caml
> conventionnel ?
You have to explain to the typechecker that the Nil stream will
never be patched:
type
'a stream =
| Nil
| Patchable of 'a stream_patchable
and 'a stream_patchable = { mutable data : 'a streamCell }
and
'a streamCell =
| Cons of 'a * 'a stream
| Append of 'a stream * 'a stream
| Delayed of (unit -> 'a stream)
| Generator of int * (int -> int) * (int -> 'a)
Of course, this is less efficient (one would like to write
as in other ML dialects,
type
'a stream =
| Nil
| Patchable of { mutable data : 'a streamCell }
[see http://pauillac.inria.fr/~lefessan/src/ for such a patch
to OCaml 2.02]
...
Any plan to introduce this syntax in OCaml ?
)
> ensuite je voudrais abstraire le type int du constreur Generator afin
> que l'utilisateur puisse indicer sa fonction génératrice par le type
> de son choix :
>
> | Generator of 'k * (k' -> 'k) * ('k -> 'a)
>
> seulement si je déclare un type ('k, 'a) streamCell alors on ne peut
> plus utiliser des listes d'indexes de type différent alors qu'elles
> sont "logiquement" compatibles puisque le type 'k ne sert qu'a
> construire les nouvelles valeurs de type 'a
>
> comment limiter "l'étendue" du type 'k au seul constructeur
> [Generator] ?
Couln't you just abstract the generator outside the stream ?
let gen ini f =
let state = ref ini in
(fun () -> state := f !state),
(fun () -> !state);;
Do you really need to keep the current state visible ?
> - la forme spéciale lazy ressemble très fortement à la fonction lazy_
> ci-dessous mis à part qu'elle n'évalue pas ses arguments
>
> (* OCaml 3.04 *)
> let lazy_ = function x -> ref (Lazy.Delayed (function () -> x))
>
> Quels seraient les inconvénients (théoriques ? pratiques ?) d'une
> forme spéciale [uneval_] qui serait équivalente à function () ->,
> autrement dit
>
> uneval : 'a -> (unit -> 'a)
> uneval_ x <=> function () -> x
What do you mean by "forme spéciale" ? If you just want syntactic
sugar, you can implement it yourself with Camlp4.
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2002-08-02 15:29 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-03 2:49 [Caml-list] generic programming Oleg
2002-07-03 8:37 ` [Caml-list] " Ketanu
2002-07-03 17:29 ` Chris Hecker
2002-07-03 20:07 ` Oleg
2002-07-03 20:34 ` Alessandro Baretta
2002-07-04 15:33 ` John Max Skaller
[not found] ` <3D249B27.5080807@baretta.com>
[not found] ` <3D25D27B.2020005@ozemail.com.au>
2002-07-07 20:42 ` Alessandro Baretta
2002-07-08 0:59 ` John Max Skaller
2002-07-08 7:29 ` Alessandro Baretta
2002-10-15 0:10 ` Eray Ozkural
2002-07-03 21:55 ` Peter Wood
2002-07-04 2:02 ` james woodyatt
2002-07-04 15:18 ` John Max Skaller
2002-07-05 8:42 ` Francois Pottier
2002-07-05 9:25 ` Xavier Leroy
2002-07-05 9:57 ` Chris Hecker
2002-07-05 13:54 ` Xavier Leroy
2002-07-05 17:59 ` Chris Hecker
2002-07-05 20:31 ` John Max Skaller
2002-07-05 19:33 ` John Max Skaller
2002-07-05 19:31 ` John Max Skaller
2002-07-05 8:33 ` Francois Pottier
2002-07-05 23:05 ` Dave Berry
2002-07-08 9:54 ` Francois Pottier
2002-07-08 15:49 ` John Max Skaller
2002-08-02 14:49 ` [Caml-list] Streams Diego Olivier Fernandez Pons
2002-08-02 15:29 ` Alain Frisch [this message]
2002-08-03 14:19 ` Diego Olivier Fernandez Pons
2002-07-03 8:42 ` [Caml-list] generic programming Johan Baltié
[not found] ` <002301c22270$fb4ca160$2be213c3@youngkouzdra>
[not found] ` <20020703092753.M39371@wanadoo.fr>
2002-07-05 10:38 ` Anton Moscal
2002-07-03 9:10 ` Jun P.FURUSE
-- strict thread matches above, loose matches on Subject: below --
2006-08-10 10:51 Streams Error404
2006-08-10 11:40 ` [Caml-list] Streams Jonathan Roewen
2006-08-10 19:02 ` Chris King
2006-08-10 18:32 ` Martin Jambon
2006-08-11 0:00 ` Jon Harrop
[not found] <F241eHu7RVLCMUWktUq0000fbc1@hotmail.com>
2002-04-09 18:09 ` [Caml-list] Cannot find Stream Parser Documentation Wolfram Kahl
2002-04-10 11:03 ` [Caml-list] Streams Daniel de Rauglaudre
2002-04-11 14:35 ` Wolfram Kahl
2001-03-27 2:12 [Caml-list] Caml Development Kit Patrick M Doane
2001-03-27 3:15 ` Brian Rogoff
2001-03-27 6:48 ` [Caml-list] Streams Daniel de Rauglaudre
[not found] ` <3AC04E85.EE51D597@univ-savoie.fr>
2001-03-27 8:37 ` Daniel de Rauglaudre
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=Pine.SOL.4.44.0208021706020.17897-100000@clipper.ens.fr \
--to=frisch@clipper.ens.fr \
--cc=Diego-Olivier.FERNANDEZ-PONS@cicrp.jussieu.fr \
--cc=caml-list@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