Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Printf question
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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