在Haskell中,许多函数名只包含符号字符。与$$
,>>=
,>>
,:
,->
,=>
,=~
一样。
由于我是Haskell的新手,我发现很难在Google中搜索他们的意思。例如,为了理解Haskell中->
的含义,我需要使用搜索字符串hyphen followed by greater than
,这不是最好的方法,就像我一样。
我是否可以搜索仅带符号的函数?
答案 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
”。=>
的含义来自“约束”或“类型”课程“在哈斯克尔。
除了->
之外,您有时也会看到运算符出现在类型签名中。这些应该可以通过上述程序进行搜索。
ghc -v
查找该文件正在使用的软件包版本,然后单击该版本。