带有符号字符的函数名称使谷歌搜索变得困难

Function names with symbol characters makes Googling difficult

在Haskell中,很多函数名只包含符号字符。像 $$>>=>>:->=>=~

由于我是 Haskell 的新手,我发现很难在 Google 中搜索它们的含义。例如,要了解 -> 在 Haskell 中的含义,我需要使用搜索字符串 hyphen followed by greater than,这不是我的最佳方法。

有什么地方可以搜索只有符号的函数吗?

是的,这是 Google 的一个已知错误。您可能会考虑使用更好的搜索引擎,例如 Hoogle.

一般情况下,您需要查找文档以了解实际功能。为此,您需要知道它在什么 module 中定义。确定这一点的最简单方法是在 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 类型类。就其本身而言,这是相当 google 可行的,但是如果该类型类关键字不存在,您将要做的是 google GHC.Base,第一个导致下面 the base package overview page. Once you are there1 then you look for a little link labeled [Index] 的结果模块列表(GHC.Base 有一个巨大的模块列表,所以在这种情况下更容易错过)。

单击 link 会将您带到该包中 所有 public 符号的索引 ;您可以单击 > 字符来查找所有以大于号开头的运算符。然后,您将拥有三个 link 导出该功能的模块;单击其中一个并按 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") 的含义根据它是否出现在 lambda 表示法(如 \a b -> b)、大小写表达式或函数的类型签名(其中 a -> b -> c的意思是"a function which takes an a and returns a function which takes a b and returns some c"。=>的意思来自"constraints"或"type classes"中的Haskell。

除了->,您有时也可以在类型签名中看到运算符。这些应该可以通过上述过程搜索到。

  1. 这是假设软件包稳定 API。如果 API 已更改,您将需要使用 ghc -v 查找文件使用的软件包版本,然后单击该版本。