Названия функций с символьными символами затрудняют работу с Google

В Haskell многие имена функций содержат только символы символов. Как $$, >>=, >>, :, ->, =>, =~.

Поскольку я новичок в Haskell, мне трудно искать их значения в Google. Например, чтобы понять, что означает -> в Haskell, мне нужно использовать строку поиска hyphen followed by greater than, которая не подходит для меня.

Есть ли место, где я мог бы искать функции только с символами?

Ответ 1

Да, это известная ошибка с Google. Вы можете рассмотреть лучшую поисковую систему, например Hoogle.

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

Prelude> :info (>>=)
class Monad (m :: * -> *) where
  (>>=) :: m a -> (a -> m b) -> m b
  ...
    -- Defined in ‘GHC.Base’
infixl 1 >>=
Prelude> 

Если сигнатуры типа недостаточно, то это также говорит вам, что вам нужен google модуль GHC.Base и класс Monad. Само по себе это довольно googleable, но если это ключевое слово typeclass не было, то вы бы сделали, чтобы google GHC.Base, первый результат, который привел к странице обзора пакетов base/a > . После того, как вы там, 1 вы найдете небольшую ссылку с надписью [Index] под списком модулей (GHC.Base имеет огромный список модулей, поэтому в этом случае легче пропустить).

При нажатии этой ссылки вы попадаете в индекс всех открытых символов в этом пакете; вы можете щелкнуть символ >, чтобы найти все операторы, начинающиеся с знака больше знака. Затем вы будете иметь три ссылки модулей, которые экспортируют эту функцию; нажмите на один и Ctrl-F, чтобы найти следующую документацию:

(>>=) :: forall a b. m a -> (a -> m b) -> m b  | infixl 1 | Source
    Sequentially compose two actions, passing any value produced by the first 
    as an argument to the second.

Опять же, Hoogle делает все это для вас и имеет некоторые другие отличные функции, такие как поиск по типу-подписи.

Для таких вещей, как <-, -> и =>, которые являются не функциями, вам просто нужно знать язык. Значение <- ( "from" ) относится к "do-notation", которое вы можете использовать Google; значение -> ( "to" ) изменяется в зависимости от того, появляется ли оно в лямбда-нотации (например, \a b -> b), case-выражения или сигнатура типа функции (где a -> b -> c означает "функция, которая принимает a a и возвращает функцию, которая принимает значение b и возвращает некоторый c". Значение => относится к "ограничениям" или "типам классов" в Haskell.

Кроме ->, вы также можете видеть операторы, появляющиеся в сигнатурах типов. Они должны быть доступны для поиска по описанной выше процедуре.

  • Это предполагает стабильный API для пакета. Если API изменился, вам нужно будет искать ghc -v, какую версию пакета использует этот файл, затем нажмите на эту версию.