I take it back! Some of my code goes via external functors which indeed hide various type equalities.

Thanks for your help.

On 24 February 2017 at 09:16, Tom Ridge <tom.j.ridge+list@googlemail.com> wrote:
My functors never hide anything, and always include the input module as a submodule of the output module. So I hope that type equalities are as maximally visible as they could be. But ocamldebug doesn't seem to get it :(



On 23 February 2017 at 17:02, Ivan Gotovchits <ivg@ieee.org> wrote:
It matters whether in the signature of a module that is produced by the functor, the type of the key is still the same as the type of the key parameter. If it is not, then debugger cannot know, whether the output type is a key or not. Probably, if you add a sharing constraint between the functor parameter signature and the resulting module signature the debugger with capture it. Especially, if this would be an erasing signature (although it is not always possible), e.g.,

module M = sig type key type t end
module Make(Key : T) : M with type key = Key.t

or

module Make(Key : T) : M with type key := Key.t


If these approaches do not work for you, then you can define a printer yourself in a separate module (that is loaded with `load_printer` command). In this printer you may apply a functor,
and since functors are applicative in OCaml the debugger might be clever enough to pick this printer. It is not guaranteed, though, as the debugger is using lots of heuristics, and sometimes, they do fail. 


Best wishes,
Ivan



On Thu, Feb 23, 2017 at 11:49 AM, Tom Ridge <tom.j.ridge+list@googlemail.com> wrote:
Regarding `#install_printer`, can you explain more? The type "Key_value_types.key" is equal to string (in this particular case). However, this type is produced via module application, and so I cannot construct a printer that can print values of type "Key_value_types.key" before program execution (which seems to be required for #install_printer). 

Somehow I seem to want to tell ocamldebug that Key_value_types.key is in fact equal to string. Or alternatively coerce kra (using Obj.magic) to string type so that it can easily be printed by ocamldebug?



On 23 February 2017 at 16:31, Ivan Gotovchits <ivg@ieee.org> wrote:
Probably it is an abstract type, that is represented as string. In any case you can use the `#install_printer` directive to enable printing any type. The argument
is a function of type `t -> Format.formatter -> unit`, where `t` is a name of your type. 

On Thu, Feb 23, 2017 at 11:24 AM, Tom Ridge <tom.j.ridge+list@googlemail.com> wrote:
Dear All,

I am debugging some code. For various reasons I have started to use ocamldebug rather than printf.

I should say that ocamldebug is excellent. Really excellent. Especially the "backwards" stepping.

However, sometimes I want to see the value of a particular variable. I can use the "p" (print) command as:

(ocd) p kra
kra: Key_value_types.key = <abstr>

The problem is that I know that kra is a string. But ocamldebug only shows <abstr>. 

Admittedly the code is functorized. But I have a feeling I should be able to tweak something to get ocamldebug to print the value of kra.

Any ideas?

T