Ответ 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
, какую версию пакета использует этот файл, затем нажмите на эту версию.