Как просмотреть определение функции в Haskell/GHCi?

Я использую Haskell 2010.1.0.0.1 с GHC 6. Ввод :t в приглашении GHCi, за которым следует имя функции, показывает нам тип функции. Есть ли способ просмотреть определение функции?


person franco hades    schedule 26.04.2011    source источник
comment
Обновление от ноября 2018 г.: в настоящее время мы работаем с GHC 8.6, и эта функциональность по-прежнему недоступна.   -  person salva    schedule 15.11.2018


Ответы (3)


Не сейчас.

Ближайшая команда к тому, что вы хотите, это :info

:информация имя ...

Отображает информацию об указанных именах. Например, если имя является классом, то будут напечатаны методы класса и их типы; если имя является конструктором типа, то будет напечатано его определение; если имя является функцией, то будет напечатан ее тип. Если имя было загружено из исходного файла, то GHCi также отобразит местоположение его определения в источнике.

Для типов и классов GHCi также суммирует экземпляры, в которых они упоминаются. Чтобы избежать отображения ненужной информации, экземпляр отображается только в том случае, если (а) в его заголовке упоминается имя и (б) все остальные элементы, упомянутые в экземпляре, находятся в области видимости (с уточнением или иным образом) в результате :load или : команды модуля.

вот так:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base
infixr 0 $

Однако вы можете посмотреть источник идентификаторов, сгенерированных инструментом пикши, на сайте Hackage.

  1. Найдите модуль на Взлом
  2. Нажмите на источник ссылка

Обратите внимание, что "?src" является допустимой командой в lambdabot на IRC-канале #haskell и делает то, что вы ожидаете.

> ?src ($)
> f $ x = f x
person Don Stewart    schedule 26.04.2011
comment
Большое спасибо. Я только недавно начал изучать Haskell и не знал о lambdabot. Это отлично работает как альтернатива. - person franco hades; 26.04.2011
comment
@franco Hades: я считаю, что lambdabot также можно установить локально, из Hackage, поэтому вам не нужно быть в IRC, чтобы использовать его (если вы этого не хотите, #haskell — хороший канал). - person C. A. McCann; 26.04.2011
comment
Очень круто — там же написано, что в ghci можно встроить lambdabot! Однако инструкции не очень ясны. - person stites; 14.01.2016
comment
если нет то почему, что мешает и когда будет доступно ? - person Daneel Yaitskov; 18.12.2019

Я так не думаю. Вы можете использовать :i для получения дополнительной информации (более полезной для инфиксных операторов и конструкций данных и т. д.), но не для определения:

ghci> :i repeat
repeat :: a -> [a]       -- Defined in GHC.List

Вы можете использовать hoogle, чтобы быстро найти документацию для стандартной библиотечной функции, которая справа имеет ссылка для перехода к источнику. Хотя до него еще несколько кликов.

person luqui    schedule 26.04.2011

Нет, не могу этого сделать. Некоторые забавные вещи, которые вы, новичок в Haskell, можете сделать:

  • В документах HTML пикши нажмите «источник»… изучите источник.
  • :browse чтобы найти все определения, экспортированные модулем
  • Используйте :help для очевидного результата
  • используйте веб-интерфейс hoogle для поиска функций или установите hoogle локально!
  • ?
  • Выгода!
person Thomas M. DuBuisson    schedule 26.04.2011
comment
:browse не дает вам определений. Он дает вам список функций модуля и их типов. - person Tshimanga; 09.11.2015
comment
Вы были бы счастливее, если бы я назвал все символы или определения верхнего уровня? Не стесняйтесь редактировать. - person Thomas M. DuBuisson; 09.11.2015