Finding which package defines a module


#1

Is there a way in utop to find which opam package defines a module? I’m looking for something similar to #show_module but that includes the name of the package in the output.


#2

You can use ocp-index to locate the specific file that contains a module or even a definition:

$ ocp-index locate Lwt_unix.sleep
/Users/rizo/.opam/4.06.1/.opam-switch/build/lwt.4.0.1/src/unix/lwt_unix.cppo.ml:139:4

From here you can easily see that the package is lwt.

I’m not sure if there’s something that can work in utop. I think odig might be able to give you this information in the future.


#3

May I ask what you want this for ?


#4

Some Modules include other modules defined in different packages. I wanted an easy way to know where to look for documentation. I usually use utop to learn how to use packages, so having that information there would be very useful.


#5

Thank you. I’ll use that for now.


#6

I think another related use case is listing all modules defined by an OPAM package groupped by sub-packages (ie archives). I know that this information is already generated in the docs with odig but having it exposed in the top-level would be very useful IMO. Unfortunately many packages still don’t wrap all defined modules into a single user-facing one.


#7

100% agree. I wanted that also early on, but I got used to going to the docs.


#8

you can use ocp-browser to have a look at the ocamldoc from a terminal