[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Pierre Weis <pierre.weis@i...> |
| Subject: | Re: [Caml-list] Printf question |
> On Mon, Sep 29, 2003 at 06:42:09PM +0200, Pierre Weis wrote:
> > I'm pretty sure that format string contsnats are typechecked
> > statically with the usual typechecker resolution mechanism (a bit more
> > complex, but no more magic than the typechecking of the -> type
> > constructor).
> >
> > So why not using format values directly ?
> >
> > For instance:
> >
> > # let prepare fmt = Printf.printf fmt;;
> > val prepare : ('a, out_channel, unit) format -> 'a = <fun>
> >
> > # let sth x =
> > prepare "select salary from emp where id = %d and name = %s" x;;
> > val sth : int -> string -> unit = <fun>
> >
> > # sth 1 "Jones"
> > select salary from emp where id = 1 and name = Jones- : unit = ()
> >
> > This is fully statically typechecked as required.
> >
> > Or may be I'm missing something ?
>
> I guess the problem is that I want my own interpretation for
> %s. It has to do SQL-quoting, otherwise you could write:
Hence, I think you are seeking for the %a conversion. For instance,
defining a quotation function for SQL as in
# let sql_quoting oc = Printf.fprintf oc "'%s'";;
val sql_quoting : out_channel -> string -> unit = <fun>
You can define sth with a %a conversion to apply quoting on the fly:
# let sth x =
prepare "select salary from emp where id = %d and name = %a" x;;
val sth : int -> (out_channel -> 'a -> unit) -> 'a -> unit = <fun>
# sth 1 sql_quoting "Jones";;
select salary from emp where id = 1 and name = 'Jones'- : unit = ()
Still fully type-checked! Sounds better, no ?
Pierre Weis
INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://pauillac.inria.fr/~weis/
-------------------
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