Есть ли эквивалент python `dir` для haskell ghci?

Есть ли эквивалент python dir для haskell ghci?

В интерпретаторе Python dir показывает определенные символы. Я хотел бы использовать что-то подобное и в Haskell, чтобы изучить функции, предоставляемые импортированными модулями.

me@mine$ python
>>> from pickle import *
>>> dir()
['APPEND', 'APPENDS', 'BINFLOAT', 'BINGET', 'BININT', 'BININT1', 'BININT2', 'BINPERSID', 'BINPUT', 'BINSTRING', 'BINUNICODE', 'BUILD', 'DICT', 'DUP', 'EMPTY_DICT', 'EMPTY_LIST', 'EMPTY_TUPLE', 'EXT1', 'EXT2', 'EXT4', 'FALSE', 'FLOAT', 'GET', 'GLOBAL', 'HIGHEST_PROTOCOL', 'INST', 'INT', 'LIST', 'LONG', 'LONG1', 'LONG4', 'LONG_BINGET', 'LONG_BINPUT', 'MARK', 'NEWFALSE', 'NEWOBJ', 'NEWTRUE', 'NONE', 'OBJ', 'PERSID', 'POP', 'POP_MARK', 'PROTO', 'PUT', 'PickleError', 'Pickler', 'PicklingError', 'REDUCE', 'SETITEM', 'SETITEMS', 'SHORT_BINSTRING', 'STOP', 'STRING', 'TRUE', 'TUPLE', 'TUPLE1', 'TUPLE2', 'TUPLE3', 'UNICODE', 'Unpickler', 'UnpicklingError', '__builtins__', '__doc__', '__name__', '__package__', 'dump', 'dumps', 'load', 'loads']

person danza    schedule 12.01.2014    source источник
comment
Самое близкое, что я знаю, это :browse для отображения привязок, экспортируемых одним модулем.   -  person Carl    schedule 12.01.2014
comment
может быть правильным ответом   -  person danza    schedule 12.01.2014
comment
Я не удивлюсь, если в GHCi не будет функциональности для перечисления всех локальных символов, поскольку вы можете выполнить :browse Prelude, :browse <MyModule/Main> и :browse <Library>, чтобы получить всю необходимую информацию. Я бы просто придерживался этого. Она немного отличается от функции dir() тем, что dir() — это правильная функция, которая возвращает список строк, которыми вы можете манипулировать.   -  person bheklilr    schedule 12.01.2014
comment
Обратите внимание, что :browse также работает без аргументов, показывая все значения в области видимости.   -  person Gabriel Gonzalez    schedule 12.01.2014
comment
@GabrielGonzalez, если это правда, :browse ближе всего к dir в ghci. На самом деле после ваших ответов я использовал его для выполнения того, что мне было нужно. Идеальный ответ будет включать ваши комментарии и ответ @YellPika, в котором упоминается :browse, завершение табуляции и разница с dir(), упомянутая @bheklilr   -  person danza    schedule 13.01.2014


Ответы (2)


Это суммирует ответы в комментариях, как вы предложили.

Вы можете использовать команду :browse без аргументов в ghci для просмотра всех значений, импортированных из последнего импортированного модуля. Если вы вызовете его при вводе ghci, он выведет все значения, импортированные Prelude. Вы также можете использовать :browse <ModuleName> для просмотра модуля, который вы еще не импортировали.

Однако это не работает для значений, которые вы сами определили в ghci. Чтобы получить к ним доступ, используйте автодополнение табуляции, как предложено YellPika.

person Gabriel Gonzalez    schedule 13.01.2014
comment
я думаю, что это хорошо обобщает, я специально написал пример @YellPika - person danza; 13.01.2014

Насколько я знаю, в Haskell нет прямого эквивалента dir. Если вы просто хотите просмотреть определения в GHCI, все, что вам нужно сделать, это нажать вкладку.

Ex:

ghci> [tab]
Display all 470 possibilities? (y or n) [y]
{spits everything that's currently in scope}

ghci> Prelude.[tab]
Display all 235 possibilities? (y or n) [y]
{spits out everything in the Prelude namespace}
person YellPika    schedule 12.01.2014