[m-users.] A perldoc-style tool (but no hoogle yet)

Julian Fondren jfondren at minimaltype.com
Mon Sep 23 13:31:33 AEST 2019


Hello list,

I've got a tool for quick access to Mercury documentation on Unix
systems, with perldoc as the inspiration. For example, if you're
suddenly not sure which parameter of list.member/2 is which,

   $ mmc-doc list member
       % member(Elem, List):
       %
       % True iff `List' contains `Elem'.
       %
   :- pred member(T, list(T)).
   :- mode member(in, in) is semidet.
   :- mode member(out, in) is nondet.

       % member(Elem, List, SubList):
       %
       % True iff `List' contains `Elem', and `SubList' is a suffix of 
`List'
       % beginning with `Elem'.
       % Same as `SubList = [Elem | _], append(_, SubList, List)'.
       %
   :- pred member(T::out, list(T)::in, list(T)::out) is nondet.

in a separate terminal can remind you. Other usage:

   $ mmc-doc map

This opens the 'map' module doc in a web browser, downloading it once if
necessary. Currently mmc-doc tries to use 'w3m' and falls back to
'xdg-open', and the browser can be overridden with $WWWPAGER

   $ mmc-doc -l map

This opens your installed library reference in a web browser, focused on
the start of the map documentation.

   $ mmc-doc -i ref

This opens your installed language reference.

   $ mmc-doc io '' -t type -g

This is a little bit arcane, but displays all of the types in the io
module. 'io' is the module, '' is the thing to search for (the empty
string), -g makes it search by substring, so that the empty string will
always be found, and '-t type' restricts matches to ':- type'
declarations.

The tool is a bit hacky, and certainly isn't enough to duplicate a
'hoogle'-like tool since it doesn't actually parse the interfaces. It
can't find a type::mode pair in a non-unified predicate declaration, for
example. But I've already found it to be pretty useful. (looking up
list.member params is a real example.)

You can get it with mmc-get or at https://github.com/jrfondren/mmc-doc

Currently it needs 'wget' to get documentation.


More information about the users mailing list