在Haskell中,许多函数名称只包含符号字符。类似于$$
,>>=
,>>
,:
,->
, =>
,=~
。带符号字符的函数名称使搜索困难
由于我是Haskell的新手,我发现很难在Google中搜索他们的含义。例如,要了解什么->
在Haskell中的含义,我需要使用搜索字符串hyphen followed by greater than
,这不是最好的方法,按照我的说法。
有没有可以用符号搜索函数的地方?
在Haskell中,许多函数名称只包含符号字符。类似于$$
,>>=
,>>
,:
,->
, =>
,=~
。带符号字符的函数名称使搜索困难
由于我是Haskell的新手,我发现很难在Google中搜索他们的含义。例如,要了解什么->
在Haskell中的含义,我需要使用搜索字符串hyphen followed by greater than
,这不是最好的方法,按照我的说法。
有没有可以用符号搜索函数的地方?
是的,这是Google的一个已知错误。你可能会考虑更好的搜索引擎,如Hoogle。
一般而言,您需要查看实际功能的文档。要做到这一点,你需要知道它的定义在模块中。确定这个最简单的方法是将你的源文件加载到GHCi中(这样你就可以进行所有的导入等),然后询问运营商的:info
正是如此:
Prelude> :info (>>=)
class Monad (m :: * -> *) where
(>>=) :: m a -> (a -> m b) -> m b
...
-- Defined in ‘GHC.Base’
infixl 1 >>=
Prelude>
如果类型签名是不够的,那么这也告诉你,你需要谷歌GHC.Base
模块和Monad
类型类。本身这是非常可以谷歌,但如果该类型关键字不存在,你会做的是谷歌GHC.Base
,第一个结果导致the base
package overview page。一旦你在那里然后你在模块列表下寻找一个标有[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这是否rigamarole你的一切,有一些其他时髦的功能,如搜索按类型签名。
类的东西<-
,->
和=>
这是不功能,你只需要知道的语言。 <-
(“from”)的含义是来自“do-notation”,您可以Google; ->
(“to”)的含义取决于它是否出现在lambda表示法中(如\a b -> b
),case-expressions或函数的类型签名(其中a -> b -> c
表示“函数需要a
并返回函数这需要一个b
和返回一些c
”的=>
意思是‘在Haskell约束’或‘类型类’。
除了->
,你有时可以看到运营商出现在类型签名了。这些应该是通过上述程序搜索
ghc -v
查找该文件正在使用的软件包版本,然后单击该版本。
Radio Erewan的回答:原则上是的,但 - >不是函数......它是一个类型构造函数。 – Ingo
您可以使用[hoogle](https://www.fpcomplete.com/hoogle)来搜索Haskell功能,它对于运营商来说非常合适。但是,' - >'不会出现,因为它是Haskell语法的一部分,不是运算符(就像'=>')。 – bheklilr
使用[Hoogle](https://www.haskell.org/hoogle/?hoogle=( - %3E))或[Hayoo](http://hayoo.fh-wedel.de/?query=-%3E )但不是说这些被称为运营商 – Carsten