2012-04-13 80 views

回答

16

需要一個類型類型就像將一個額外的參數傳遞給包含類型成員的函數作爲數據結構一樣,因爲在GHC中解析後的場景就是這樣。這就是說,GHC非常擅長內聯和專門化使用類型類的代碼,以至於它不是一個問題,而-O2很大一部分消失了,但即使沒有那種優化級別傳遞論據相當便宜。

所以開銷比幻影類型或新類型多,但它不是很高。

另外,其他編譯器的開銷可能會有所不同。例如JHC有效地使用有限形式的依賴類型對類型構造函數進行案例分析,因此您支付約束類型變量的數量,而不是在JHC中工作時的約束數量。

+16

傳遞一個額外的參數很便宜。在通過的記錄中調用未知函數非常昂貴。因此,類型類非常昂貴,除非編譯器設法將它們專門化。 – augustss 2012-04-13 22:35:22

+1

我總是欣賞Augustss的答案風格。提供過分合格的答案,並且如此簡潔以至於許多提問者不瞭解他們的全部價值(自2011年起)。我有時覺得我們應該製作一個bot,總是對他的回答/評論發表評論,說:「哇,這很好知道!」。 – 2012-04-14 21:42:29

+2

真的,我想我應該補充一點,從傳遞的字典中調用一個函數需要至少一個,通常是2個間接跳轉,這意味着管道延遲等。 – 2012-04-15 04:33:06