在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