Le mercredi 07 décembre 2011 à 17:56 +0100, François Bobot a écrit :
> 1) If I understand well the "%show" command is expanded into the ocaml 
> code (lambda-code) which can print the type. So, for instance, in the 
> case of a list, your code generates a recursive function "aux" and it 
> applies this new "aux" function to the argument of "%show". Do you plan 
> to add in the module List a function :
> 
> val string_of_list : ('a -> string) -> 'a list -> string
> 
> and to generate only the call to this function instead of generating the 
> "aux" function every time? Or do you do it purposely?

It is not in the lambda-code: i get the typed tree, generate for every
occurrence of %show a parsetree using types and type this parsetree. The
result is inserted in place of %show.

For the rest, yes, it is how it works. Of course it is better if the
printer is defined once and for all in its module. I did not modify the
standard library because i did not wanted to rebuild all my libraries.

> 2) Could you imagine to generalize it to Format.formatter or to 
> out_channel (without creating a string and concatenating)? Romain Bardou 
> add in the mantis tracker (I can't give you the bugtracking number since 
> mantis "is currently offline for maintenance") a feature wish for a new 
> conversion specification that can print anything. Do you think you can 
> fulfill is dream?

For using formatter, yes, we can do that. This patch is more a proof of
concept. If we want to really use it we can do something more generic
than just generating printers. For example we could generate type
representation values from which we would generate printers,
marshallers, ...

For the new conversion specification i don't think it is possible with
the way the stdlib implements printf. The best you can do is something
like:

  printf "%a" show value

However it is possible with batteries' formatted printing
(Print.printf p"%s" ...).

> 3) Is it impossible to reuse/merge with the code of the top level that 
> print ocaml values?

No, the toplevel use outcome trees (defined in Outcometree).

> Thank you for providing this code. Funny the way you find the user 
> defined function. Be careful to not implement type classes in Ocaml ;)

:-)

-- 
Jérémie



-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to