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 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 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 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 = >>>>> >>>>> The problem is that I know that kra is a string. But ocamldebug only >>>>> shows . >>>>> >>>>> 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 >>>>> >>>> >>>> >>> >> >