2013-01-13 54 views
4

我正在閱讀關於IxSet的http://happstack.com/docs/crashcourse/AcidState.html#ixset的一些文檔,我在想查看從Data.IxSet導入的Indexable類型類型的源。如何在Haskell中找到一個類的源代碼(實現)

然後我拿了一個Happstack存儲庫,看了看(darcs得到http://patch-tag.com/r/mae/happstack),但那讓我感到更大的沮喪。

我看到happstack/happstack-ixset/src/Happstack/Data/IxSet.hs文件,它創建一個Happstack.Data.IxSet模塊,但我看不到哪個文件創建了一個模塊Data.IxSet(和實現類可索引)。

+0

您鏈接到的頁面提供了一個包的鏈接:「IxSet可以在[hackage]上找到(http://hackage.haskell.org/package/ixset)」。幸運的是,我們只有兩個模塊需要檢查。點擊,我們跳轉到一個Haddock文檔頁面。我們可以在哪裏使用瀏覽器的「查找」功能。當我們[找到它](http://hackage.haskell.org/packages/archive/ixset/1.0.5/doc/html/Data-IxSet.html#t:Indexable)時,有一個[「source」]( http://hackage.haskell.org/packages/archive/ixset/1.0.5/doc/html/src/Data-IxSet.html#Indexable)鏈接到其右側。 –

回答

5

Haskell代碼的前往地址是hackage。除了Hoogle之外,其他主要的Haskell搜索引擎還可以方便地鏈接到Hayoo的首頁。兩者都有優勢。

Hayoo將hackage上的所有軟件包進行索引,默認搜索包括hackage上的所有軟件包。如果你想搜索一個已知的名字,例如Indexable,這是更方便的引擎,特別是如果你不知道名稱來自哪個包。當前 - 第五次擊中將帶您到Data.IxSet.Indexable。在Haddock文檔的右側,你會發現一個鏈接,它將你帶到hscoloured的源代碼(在這種情況下,這不是很有用的信息,但是,只有一個類成員,沒有默認的實現,它告訴你什麼都沒有文檔)。

Hoogle默認只搜索少量的包,如果要在搜索中包含其他包,則必須指定將+packagename添加到搜索中 - 但會將搜索限制在指定的包中。詳細瞭解manual中的Hoogle搜索。 Hoogle的優勢在於按類型搜索。 Hoogle的按類型搜索會對搜索類型應用更多的轉換,因此如果您不知道確切類型(這不是沒有缺點,但有時您會得到大量不相關的點擊),因此找到比Hayoo更多的匹配。如果您搜索示例Map k a -> k -> Maybe a,Hoogle的第一個結果是最可能的候選Data.Map.lookup :: Ord k => k -> Map k a -> Maybe a,而Hayoo沒有找到它,因爲它不排列參數。

無論採用哪種方式,如果您願意,兩種搜索引擎都會引導您查詢被查詢實體的hackage的Haddock文檔(如果搜索成功),從那裏獲取代碼。

+0

丹尼爾,你知道一個(任何)(好)的方式來找到給定的實例定義嗎? –

+0

不可靠,因爲有幾個孤兒實例。但是檢查定義類的模塊和定義類型的模塊很有可能找到它。否則,ghci中的':info type'或':info class'可能會告訴你實例是在哪裏定義的。 –

+0

謝謝,是的,這就是我現在知道的。 IOW,沒有方便的方法找到它們 - 搜索實際的源文件不是很方便。我如何找到該源文件? ':我只是給了我源文件的名字,而不是它的路徑。那麼有理由說,沒有方便的方法來找到實例?這不是Haddock的(巨大)劣勢嗎?這可以改善嗎? –

1

使用本地生成或在線的Haddock文檔。谷歌搜索通常會返回頂部附近的相關文檔。文檔是交叉鏈接的,因此您可以瀏覽到您需要的模塊。每個定義的旁邊都有一個鏈接,for example

此特定模塊屬於基本庫集。

+0

[Hoogle](http://www.haskell.org/)也是一個很好的開始,如果你知道某物的名稱或類型,但不知道它有什麼樣的包裝。 – Davorak

+0

對不起,但我沒有似乎得到它。這是Data.Ix,而不是Data.IxSet(或者我錯過了什麼?),並且你鏈接的頁面沒有提到「Indexable」類(所以我沒有看到它的定義鏈接)。 –

+1

好的,所以我使用Google,搜索「數據」。IxSet「,並找到http://hackage.haskell.org/packages/archive/ixset/1.0.2/doc/html/Data-IxSet.html#t:Indexable,這就是我所需要的。但是,谷歌的方式來找到我需要的東西?我的意思是,我知道模塊,類名。我怎麼能找到它的源代碼?也許在本地某個地方 –

相關問題