Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

так:

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

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

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

> ?src ($)
> f $ x = f x

Ответ 2

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

  • В документах HTML-документов HTML нажмите "источник"... изучите источник.
  • :browse, чтобы найти все определения, экспортированные модулем
  • Используйте :help для очевидного результата
  • используйте веб-интерфейс hoogle для поиска функций или установки локального хоста!
  • Profit!

Ответ 3

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

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

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