Как я могу просмотреть определение функции в Haskell / GHCi? - PullRequest
45 голосов
/ 26 апреля 2011

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

Ответы [ 3 ]

40 голосов
/ 26 апреля 2011

В настоящее время нет.

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

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

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

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

примерно так:

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

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

  1. Посмотрите модуль на Hackage
  2. Нажмите на ссылку источника

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

> ?src ($)
> f $ x = f x
6 голосов
/ 26 апреля 2011

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

  • В документах HTML пикши нажмите «источник» ... изучите источник.
  • :browse, чтобы найтивсе определения, экспортируемые модулем
  • Используйте :help для очевидного результата
  • используйте веб-интерфейс hoogle для поиска функций или установите Google локально!
  • ?
  • Прибыль!
6 голосов
/ 26 апреля 2011

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

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

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

...