2015-05-07 44 views
10

在Haskell中,許多函數名稱只包含符號字符。類似於$$>>=,>>,:,->, =>,=~帶符號字符的函數名稱使搜索困難

由於我是Haskell的新手,我發現很難在Google中搜索他們的含義。例如,要了解什麼->在Haskell中的含義,我需要使用搜索字符串hyphen followed by greater than,這不是最好的方法,按照我的說法。

有沒有可以用符號搜索函數的地方?

+0

Radio Erewan的回答:原則上是的,但 - >不是函數......它是一個類型構造函數。 – Ingo

+7

您可以使用[hoogle](https://www.fpcomplete.com/hoogle)來搜索Haskell功能,它對於運營商來說非常合適。但是,' - >'不會出現,因爲它是Haskell語法的一部分,不是運算符(就像'=>')。 – bheklilr

+4

使用[Hoogle](https://www.haskell.org/hoogle/?hoogle=( - %3E))或[Hayoo](http://hayoo.fh-wedel.de/?query=-%3E )但不是說這些被稱爲運營商 – Carsten

回答

19

是的,這是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約束’或‘類型類’。

除了->,你有時可以看到運營商出現在類型簽名了。這些應該是通過上述程序搜索

  1. 這是假設一個穩定的API包。如果API已更改,則需要使用ghc -v查找該文件正在使用的軟件包版本,然後單擊該版本。
+0

您也可以直接跳轉到[hoogle](https://www.haskell.org/hoogle/?hoogle=%28%3E%)來跳過查找軟件包的GHCi步驟3E%3D%29)或[hayoo](http://hayoo.fh-wedel.de/?query=%28%3E%3E%3D%29)並搜索運算符(將其括在括號中)。 – mhwombat

+0

@mhwombat我兩次提到hoogle,雖然hayoo也是一個很好的鏈接,值得在這裏提及。 –

+0

這不是一個錯誤,它是一個功能! – AJFarmar