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

时间:2015-05-07 16:33:49

标签: haskell symbols

在Haskell中,许多函数名只包含符号字符。与$$>>=>>:->=>=~一样。

由于我是Haskell的新手,我发现很难在Google中搜索他们的意思。例如,为了理解Haskell中->的含义,我需要使用搜索字符串hyphen followed by greater than,这不是最好的方法,就像我一样。

我是否可以搜索仅带符号的函数?

1 个答案:

答案 0 :(得分:20)

是的,这是谷歌的一个已知错误。您可以考虑使用更好的搜索引擎,例如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类型类。它本身就具有可谷歌性,但如果那个类型类关键字不存在,那么你要做的就是谷歌GHC.Base,这是第一个导致the base package overview page的结果。一旦你在那里 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”,你可以使用谷歌; ->(“to”)的含义取决于它是否以lambda表示法(如\a b -> b),case-expression或函数的类型签名(a -> b -> c出现)。表示“一个函数,它接受a并返回一个函数,该函数接受b并返回一些c”。=>的含义来自“约束”或“类型”课程“在哈斯克尔。

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

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