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

10 haskell symbols

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

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

有没有我可以搜索带符号功能的地方?

CR *_*ost 20

是的,这是谷歌的一个已知错误.你可能会考虑像Hoogle这样的更好的搜索引擎.

通常,您需要查找实际功能的文档.要做到这一点,你需要知道它定义了什么模块.确定这个的最简单方法是在GHCi中加载你的源文件(这样你就可以获得所有的导入等),然后请求运营商:info:

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

如果类型签名不够,那么这也告诉您需要谷歌GHC.Base模块和Monad类型类.就其本身而言这是相当googleable,但如果这类型类的关键字都没有了,你会做的是谷歌GHC.Base,第一个结果,导致base包概述页面.一旦你在那里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.
Run Code Online (Sandbox Code Playgroud)

同样,Hoogle为您完成了所有这些繁琐工作,还有一些其他漂亮的功能,例如按类型签名搜索.

喜欢的事情<-,->以及=>它们是不是功能,你将只需要知道的语言.<-("来自")的含义来自"do-notation",你可以谷歌; ->("to")的含义取决于它是否以lambda-notation(like \a b -> b),case-expression或函数的类型签名出现(其中a -> b -> c"是一个函数,它接受a并返回一个函数,它取一个b和返回一些c".的含义=>来自Haskell中的"约束"或"类型类".

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

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